【问题标题】:Laravel Mass update using foreach loopLaravel 质量更新使用 foreach 循环
【发布时间】:2021-02-19 02:55:25
【问题描述】:

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

 $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();
    }

提前致谢。

【问题讨论】:

    标签: php laravel laravel-7


    【解决方案1】:

    您应该将first() 方法添加到Product 模型的一个实例,然后将其附加或分离到其他东西。此外,您可以将数组传递给 attach 或 detach 方法来创建或删除关系,因此首先收集 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()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 2018-06-17
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      相关资源
      最近更新 更多