gpt4 book ai didi

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

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

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

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

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

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

接下来,我的想法是根据请求数据循环遍历此 标记updateOrCreate 的每个 product。这里的问题是,无法检测该特定 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 字段是否根据请求更新?

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

最佳答案

根据我的看法,您走错了路。标记关系应该是多对多。

你必须在多对多关系中检查 Laravel 的 sync() 方法。请检查:https://laravel.com/docs/5.8/eloquent-relationships#many-to-many

注意:请根据您的业务逻辑添加代码。

Product.php

  public function products(){
return $this->belongsToMany( 'App\Product', 'product_tags', 'tag_id', 'product_id');
}

Tag.php

   public function tags(){
return $this->belongsToMany( 'App\Tag', 'product_tags', 'product_id', 'tag_id');
}

ProductController.php

  public function update(Product $products,  Request $request){
//update the product
$products->update($request->all());

//attach new tags to the product
$products->tags()->sync($request->input('tag_list'));

return redirect('articles');
}

关于php - 使用 updateOrCreate 方法更新一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55085683/

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