【问题标题】:Create Entity with one to many relationship Laravel创建具有一对多关系的实体 Laravel
【发布时间】:2018-06-12 12:03:47
【问题描述】:

我有一个 Product 类和一个 Image 类。每个产品都有许多图像。我相信我已经正确建立了关系,但是在创建产品时,我在创建图像时遇到了麻烦。我有一个函数接受一个请求,该请求包含一个包含产品详细信息的 JSON 对象,包括图像数组。我将 JSON 转换为变量,但如果我只是将变量保存到数据库中,它只会保存产品详细信息,不包括图像。我使用以下方法查看了 trid,但 $product 变量未被识别为 Product 类型,因此无法识别 Product 类上的 images()。

$product->images()->save($images)

这是用于创建产品的函数:

public function api_create(Request $request)
{
    try {
        $product = new Product;
        $product = json_decode($request->getContent(), true);
        $images = $product['images'];
        return Product::create($product);
    } catch (Exception $exception) {
        return "error";
    }
}

在产品类中:

public function images(){
    return $this->hasMany('App\Image', 'productId');
}    

在图像类中:

public function product(){
    return $this->belongsTo('App\Product', 'productId');
}

图像数据库列:id(PK)、productId(FK)、imageUrl

产品数据库列:id(PK)、标题、描述

【问题讨论】:

  • 您必须添加一个循环来添加来自 json 的图像。

标签: php json laravel laravel-5


【解决方案1】:

改变这个:

$images = $product['images'];
return Product::create($product);

收件人:

$product = Product::create($product);
foreach ($product['images'] as $image) {
    $product()->images()->create($image);
}
return $product;

如果每个 $image 是一个格式正确的数组,这将起作用,例如:

['filename' => 'flower.jpg', 'size' => 54438]

如果格式不同,则需要手动映射,例如:

->create([
    'filename' => $image['uploaded_file_name'],
    'size' => $image['file_size_in_bytes']
]);

【讨论】:

  • 嗨,不幸的是,它仍然没有将图像添加到数据库,只是产品。当我调试时,它会命中 foreach 循环,但它不会执行 foreach 循环内的行。我没有收到任何错误或异常。我还编辑了我的问题以添加更多细节
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
相关资源
最近更新 更多