san*_*jha 5 php orm laravel eloquent laravel-5
好吧,我使用的是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');
}
Run Code Online (Sandbox Code Playgroud)
我正在提供一个表单界面来更新现有产品。在那我有4个可选的文件上传输入html标签,用于更新或添加产品的(新)图像。请记住,所有这4张图片都是可选的。
所以我的问题是什么是最好的方法(laravel方法)
product_images表我知道attachor detach方法(sync)删除所有内容,然后添加提供的内容。但是,如果我们要替换任何现有图像,我想保留ID。
小智 3
老问题,但这里有一个答案。
1 和 2 - 如果未提供现有图像 ID,Laravel 的 updateOrCreate() 方法将更新现有记录并插入新记录。请参阅Eloquent ORM 的更新文档下的“updateOrCreate” 。
$images = App\ProductImage::updateOrCreate(
['id' => $id],
['field1' => $field1, 'field2' => $field2]
);
Run Code Online (Sandbox Code Playgroud)
3 - 要删除,请在表单中添加删除复选框,将目标图像 ID 作为数组传递...
<input type="checkbox" name="imgsToDelete[]" value="{{$product->image->id}}">
<label>Delete</label>
Run Code Online (Sandbox Code Playgroud)
...然后,在您的产品更新方法中,只需将字段数组传递给 Eloquent 的 destroy() 方法即可。
$imgsToDelete = $request->get('imgsToDelete');
ProductImage::destroy($imgsToDelete);
Run Code Online (Sandbox Code Playgroud)
不要忘记从文件系统中删除存储的图像!
| 归档时间: |
|
| 查看次数: |
5221 次 |
| 最近记录: |