[英]How to UPDATE one to many (hasMany) relation in 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');
}
我正在提供一個表單界面來更新現有產品。 在那里我有4個可選的文件上傳輸入html標簽,用於更新或添加產品的(新)圖像。 請記住,所有這4張圖片上傳都是可選的
所以我的問題是什么是最好的方法(laravel方式)
product_images
表中的現有條目 我知道attach
或detach
方法( sync
)刪除所有,然后添加提供的。 但是如果我們要替換任何現有圖像,我想保持id。
老問題,但這是一個答案。
1和2 - 如果未提供現有圖像ID,Laravel的updateOrCreate()方法將更新現有記錄並插入新記錄。 請參閱Eloquent ORM的更新文檔下的“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);
不要忘記從文件系統中刪除存儲的圖像!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.