簡體   English   中英

如何在Laravel 5中更新一對多(hasMany)關系

[英]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方式)

  1. 更新product_images表中的現有條目
  2. 如果提供,添加新的
  3. 刪除現有的如果刪除

我知道attachdetach方法( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM