繁体   English   中英

错误:“方法 Illuminate\Database\Eloquent\Collection::update 不存在。” 如何将多行数据更新到表中? [雄辩]

[英]Error: "Method Illuminate\Database\Eloquent\Collection::update does not exist." How do I update multiple row of data to table? [Eloquent]

所以我有这个

        $master_item_id = array_map('intval', $request->master_item_id);
        $quantity = array_map('intval', $request->quantity);
        $price = MasterItem::whereIn('id', $master_item_id)->get('price');

        foreach ($master_item_id as $key => $no) {
            $input['price'] = $price[$key]['price'];
            $input['quantity'] = $quantity[$key];
            $subtotal[] = $input['price'] * $input['quantity'];
        }

        $total_price = array_sum($subtotal);

        // Update transaction
        $transaction = Transaction::find($id);
        $transaction->total_price = $total_price;
        $transaction->last_edited_by = Auth::user()->name;
        $transaction->update();

        // Update transaction_item
        foreach ($master_item_id as $key => $no) {
            $transaction = Transaction::find($id);
            $transaction->transaction_item->transaction_id= $transaction->id;
            $transaction->transaction_item->master_item_id = $no;
            $transaction->transaction_item->quantity = $quantity[$key];
            $transaction->transaction_item->price = $price[$key]['price'];
            $transaction->transaction_item->update();
        }

我的 Model

    // Transaction Model
    public function transaction_item()
    {
        return $this->hasMany(TransactionItem::class, 'transaction_id');
    }
    public function item()
    {
        return $this->belongsToMany(MasterItem::class, 'transaction_item', 'transaction_id', 'master_item_id');
    }
    // TransactionItem Model
    public function transaction()
    {
        return $this->belongsToMany(Transaction::class, 'transaction_id');
    }
    public function item()
    {
        return $this->belongsToMany(MasterItem::class, 'master_item_id');
    }
    // MasterItem Model
    public function transaction_item()
    {
        return $this->hasMany(TransactionItem::class, 'master_item_id');
    }

我的表结构

transaction: id(pk), total_price
transaction_item: id(pk), transaction_id(fk), master_item_id(fk), quantity, price
master_item: id(pk), item_name, price

当我尝试更新时弹出错误

Method Illuminate\Database\Eloquent\Collection::update does not exist.

错误突出显示了我的代码的这一行

$transaction->transaction_item->update();

如何编辑/更新多行数据? 还有我model里的关系对吗? 谢谢!

您正在Eloquent\\Collection上调用update()方法,但该方法不起作用。 你可以试试这个:

// Update transaction_item
foreach ($master_item_id as $key => $no) {
    $transaction = Transaction::find($id);
    $transaction->transaction_item()->update([
        'transaction_id' => $transaction->id,
        'master_item_id' => $no,
        'quantity' => $quantity[$key],
        'price' => $price[$key]['price']
    ]);
}

你需要得到$transaction->transaction_item()而不是$transaction->transaction_item你变成了Illuminate\Database\Eloquent\Relations\HasMany然后你可以调用update()方法。

$transaction->transaction_item()->update(['some_field' => 'some_variable']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM