gpt4 book ai didi

php - 如何在 Laravel 5 中更新一对多(hasMany)关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:14 25 4
gpt4 key购买 nike

好吧,我正在使用 Laravel 5.4,遇到需要更新一对多 (hasMany) 关系的情况。我有一个 products 表和一个 product_images 表。以下是我在每个模型中的关系定义。

//Product.php
public function productImages()
{
return $this->hasMany('App\ProductImage');
}

//ProductImage.php
public function product()
{
return $this->belongsTo('App\Product');
}

我正在提供一个表单界面来更新现有产品。因为我有 4 个可选的文件上传输入 html 标签,用于为产品更新或添加(新)图像。请记住,所有这 4 张图片上传都是可选的。

所以我的问题是什么是最好的方法(laravel 方式)

  1. 更新 product_images 表中的现有条目
  2. 如果提供,添加新的
  3. 删除现有的,如果它被删除

我知道 attachdetach 方法 (sync) 可以删除所有内容,然后添加提供的内容。但如果我们要替换任何现有图像,我想保留 ID。

最佳答案

老问题,但这里有一个答案。

1 和 2 - Laravel 的 updateOrCreate() 方法将更新现有记录并在未提供现有图像 ID 的情况下插入新记录。请参阅 Eloquent ORM's Update documentation 下的“updateOrCreate” .

$images = App\ProductImage::updateOrCreate(
['id' => $id],
['field1' => $field1, 'field2' => $field2]
);

3 - 要删除,请在表单中添加一个删除复选框,将目标图像 ID 作为数组传递...

<input type="checkbox" name="imgsToDelete[]" value="{{$product->image->id}}">
<label>Delete</label>

...然后,在您的产品更新方法中,只需将字段数组传递给 Eloquent 的 destroy() 方法即可。

$imgsToDelete = $request->get('imgsToDelete');
ProductImage::destroy($imgsToDelete);

不要忘记从文件系统中删除存储的图像!

关于php - 如何在 Laravel 5 中更新一对多(hasMany)关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45775736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com