使用updateOrCreate方法更新一对多关系

时间:2019-03-10 08:04:03

标签: php laravel eloquent

我的主模型TagProduct有一对多关系,其中一个Tag可以通过Products关系分配给许多tag_id在数据库上。

在我的编辑视图中,我允许用户编辑标签products。这些产品可以根据表单要求进行添加/编辑/删除。

表单上的每个product字段都是从request()数组中选取的。例如:request('title'),request('price')

例如,我将$title[$key]设置为request('title')数组。

接下来,我的想法是根据请求数据遍历productstag的每个updateOrCreate。这里的问题是,无法检测到特定的product是否确实需要更新。

TagController-更新产品模型(一对多)

foreach($tag->products as $key => $product){

  Product::updateOrCreate([
   'id'  => $product->id,
   ],
     [
       'title' => $title[$key],
       'price' => $price[$key],
       'detail' => $detail[$key],
       'order' => $order[$key],
       'tagX' => $tagX[$key],
       'tagY' => $tagY[$key],
       'thumb' => $img[$key],
   ]);
}

对于最初的tag更新,我设置了一个if语句,该语句对于主标记img很有用(尽管很混乱)。

TagController-更新标记模型

//Update the tag collection
if($request->hasFile('img')) {
  $tag->update([
    'name' => $name,
    'hashtag' => $hashtag,
    'img' => $imgPub,
  ]);
} else{
  $tag->update([
    'name' => $name,
    'hashtag' => $hashtag,
  ]);
}

是否有更好的方法来确定是否根据请求更新了product字段?

理想情况下,我希望用户能够从products编辑请求中添加/删除或编辑tag,但是如果没有更新现有产品图像,则不能删除它们。谢谢!

0 个答案:

没有答案