簡體   English   中英

Laravel 使用 foreach 循環進行大規模更新

[英]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.

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