[英]Laravel Mass update using foreach loop
我試圖用相同的外鍵批量更新記錄。 但是我遇到了一個問題。 如果我使用
$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 model 的一個實例,然后將其附加或分離到其他東西。 此外,您可以將數組傳遞給附加或分離方法以創建或刪除關系,因此首先收集 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()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.