Laravel质量更新使用foreach循环



我试图用相同的外键批量更新记录。但是我遇到了一个问题。如果我使用

$products = $products::findorfail($prod_id);

它管理更新单个列。然后当我尝试使用

$products = $products::query()->where('product_id', $prod_id)->get();

我遇到"Method Illuminate\Database\Eloquent\Collection::options does not exist.",我该如何克服这个问题

这是我当前的代码


public function update(array $data = [],  $prod_id, Variation $products)
{
foreach ($data['variants'] as $product) {
$products = $products::query()->where('product_id', $prod_id)->get();
$products->options()->detach(($product['option_id']));
$products->options()->attach(($product['option_id']));
$products->fill(Arr::set($data, 'product_id', $prod_id));
$products->fill(Arr::only($product, $products->getFillable()));
}

return $products->save();
}

提前感谢。

您应该将first()方法获取到Product模型的一个实例,然后将其附加或分离到其他事物上。此外,您可以通过一个数组来附加或分离方法来创建或删除关系,因此首先收集id,然后将它们传递给这些方法。

foreach ($data['variants'] as $product) {
$option_ids[] = $product['option_id'];
}
$product = $products::query()
->where('product_id', $prod_id)
->first();
$product->options()->detach($option_ids);
$product->options()->attach($option_ids);
$product->fill(Arr::set($data, 'product_id', $prod_id));
$product->fill(Arr::only($product, $product->getFillable()));

最新更新