【问题标题】:Update failed with hasManyThrough relationship in laravellaravel 中的 hasManyThrough 关系更新失败
【发布时间】:2018-09-21 16:19:41
【问题描述】:

我正在尝试使用 Laravel hasManyThough 更新子模型。

我尝试过的

Base模型的关系如下:

public function transactions()
{
    return $this->hasManyThrough('App\Transaction', 'App\Invoice');
}

我使用下面的代码来更新子项。

$order->transactions()->update([
        'customer_id' => 100,
        'user_id'     => 100
    ]);

我得到了什么

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'customer_id' in field list is ambiguous (SQL: update `invoice_items` inner join `invoices` on `invoices`.`id` = `invoice_items`.`invoice_id` set `customer_id` = 2, `user_id` = 2, `updated_at` = 2018-09-21 22:03:45 where `invoices`.`order_id` = 1)

我使用的是 laravel 5.6,模型默认为 artisan make:model 提供。

更新:

表结构

orders
- id
- user_id
- customer_id
- content
invoices
- id
- order_id
- user_id
- customer_id
- content
transactions
- id
- invoice_id
- user_id
- customer_id
- content

【问题讨论】:

  • 问题在于您在此处使用的查询。分享相同的内容以获得更多说明。
  • 您认为我需要更改一张表的列名吗?
  • 我建议直接更新Transaction模型。
  • 我不能,因为订单有很多发票,发票有很多交易。
  • 如果你调用 $order->transactions 你会得到一个交易集合吗?

标签: php mysql laravel eloquent


【解决方案1】:

目前,我为这个问题做了一个临时解决方案。

foreach ($order->transactions as $transaction) {
        $transaction->update($updateRules);
    }

请随时发布您的解决方案。

【讨论】:

    【解决方案2】:

    这里是解决方案:

    字段列表中的“customer_id”列不明确,即customer_id 字段存在于用于内部连接的两个表中。使用点 (.) 运算符将 customer_id 与表名一起使用。

    invoices.id = invoice_items.invoice_id 上更新invoice_items 内部连接invoices 设置发票。 customer_id = 2,发票。user_id = 2,updated_at = 2018-09-21 22:03:45 其中invoices.order_id = 1)

    【讨论】:

    • 这不是一个完全的解决方案。
    • 问题中不存在早期的表架构。现在我已经更新了我的答案。
    猜你喜欢
    • 2018-07-24
    • 2018-10-18
    • 2023-03-09
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2018-03-08
    • 2021-12-06
    相关资源
    最近更新 更多