Столбец updated_at неоднозначен при обновлении с помощью eloquent

У меня есть 3 стола корзина, аптека и cart_pharmacies

стол с тележкой

cart_id | user_id | total_price | status | created_at | updated_at

аптечный стол

pharmacy_id | name | address_id | created_at | updated_at

таблица cart_pharmacies

cart_pharmacies_id | cart_id | pharmacy_id | created_at | updated_at

В модальной корзине я определяю отношение

   public function pharmacy()
{
return $this->belongsToMany('App\Pharmacy','cart_pharmacies','cart_id','pharmacy_id');
}

В модальности parmacy я определяю

public function cart()
{
return $this->belongsToMany('App\Cart','cart_pharmacies','pharmacy_id','cart_id');
}

В контроллере у меня есть pharmacy_id я пытаюсь обновить статус корзины с помощью кода

$pharmacy_id=$request->input('pharmacy_id');
$pharmacy=  Pharmacy::findOrFail($pharmacy_id);
$pharmacy->cart()->update(['status'=>1]);

но это дает мне ошибку

SQLSTATE[23000]: Integrity constraint violation: 1052 Column
'updated_at' in field list is ambiguous (SQL: update `cart` inner join
`cart_pharmacies` on `cart`.`cart_id` = `cart_pharmacies`.`cart_id` set
`status` = 1,
`updated_at` = 2016-05-31 07:14:47 where `cart_pharmacies`.`pharmacy_id` = 5)

2

Решение

Ошибка SQL-запроса говорит о том, что существует несколько столбцов с именем updated_at (как основной, так и связанных таблиц) и не может решить, какие из них обновить. Это ошибка, и я думаю, что с eloquent невозможно решить проблему, так как updated_at будет добавлен в конце автоматически без указания имени таблицы.

1

Другие решения

Если вы используете модал, пожалуйста, обновите ваш модал этой строкой

public $timestamps = false;

попробуй, может быть полезно

0

Вы используете временные метки в вашей сводной таблице, которые могут автоматически контролироваться Eloquent с помощью метода withTimestamps ().

В вашем модальности приличия:

корзина публичных функций ()
{

return $this->belongsToMany('App\Cart','cart_pharmacies','pharmacy_id','cart_id')->withTimestamps();

}

0

Единственное решение, которое я нашел, это следующее:

Учитывая, что у вас есть массив значений для обновления ($values) и ваш запрос ($query), вы просто создаете базовый запрос и добавляете свои столбцы вручную:

$now = now();

// Manually add the timestamp columns
$values = $values + [
'table.' . Model::CREATED_AT => $now,
'table.' . Model::UPDATED_AT => $now,
];

$query->toBase()->update($values);

Model это импорт Illuminate\Database\Eloquent\Model, table это имя таблицы, которую вы действительно хотите обновить.

Не самый лучший, но он работает, может быть, это станет особенностью в будущем …

0

Вот ссылка, чтобы преодолеть проблему

https://github.com/laravel/framework/issues/13909

Использование toBase() перед обновлением помогите мне решить проблему
Удачного кодирования.

0