Не удалось обновить с помощью отношения hasManyThrough в laravel - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь обновить дочернюю модель с помощью Laravel hasManyThough.

То, что я пробовал

Базовая модель имеет следующие отношения:

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

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Пока что я нашел временное решение для этой проблемы.

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

Пожалуйста, не стесняйтесь опубликовать ваше решение.

0 голосов
/ 21 сентября 2018

Вот решение:

Столбец 'customer_id' в списке полей неоднозначен, то есть поле customer_id существует в обеих таблицах, используемых для внутреннего соединения.Используйте customer_id с именем таблицы, используя оператор Dot (.).

update invoice_items внутреннее объединение invoices on invoices. id = invoice_items. invoice_id установка накладных.customer_id = 2, счета. user_id = 2, updated_at = 2018-09-21 22:03:45 где invoices. order_id = 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...