php - 创建具有一对多关系的实体 Laravel

标签 php json laravel laravel-5

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

$product->images()->保存($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)、标题、说明

最佳答案

更改此:

$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']
]);

关于php - 创建具有一对多关系的实体 Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48066788/

相关文章:

PHP:如何保留 SOAP 响应的结构?

php - Laravel 在 "storage/logs"处没有现有目录

javascript - 如何将javascript变量值分配给php变量

json - 为什么 Aeson 将 () 编码为空数组?

html - Laravel 5 正在加载旧的 css

laravel - Laravel Eloquent 多态一对一?

php - 从变量中提取第一个数字

javascript - 从 Javascript 对象获取所有最后一个值

php - Laravel 5.3 迁移不会创建表

json - 如何在 WSO2 API 管理器中忽略具有无效 json 正文的 API 调用