SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец '' в 'предложении where'
Я получаю ошибку
"SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец '' в 'предложении where' "
с выходом sql:
update `contactables` set `updated_at` = 2019-08-16 20:35:56, `active` = 0 where `` is null and `key_ID` = 235852
Я пытался использовать красноречивый метод firstOrNew/firstOrCreate на полиморфной модели. Я пробовал всевозможные варианты этого:
$record1 = Contactable::firstOrNew(
[
'contactable_ID' => $location_ID,
'user_ID' => $user_ID,
'contactable_type' => Location::class,
]);
$record = Contactable::find($record1->key_ID);
$record->fill(
[
'active' => $active,
]);
$record->save();
$primaryKey = 'key_ID';
$guarded = [];
$fillable = [
'user_ID',
'use_loc_contact_info',
'contactable_ID',
'contactable_type',
'active',
'flag',
'print_and_save',
'marketing',
];
Похоже, это происходит только при попытке обновить запись, где я на самом деле что-то изменить. Создание записей, кажется, работает нормально, обновление, где я ничего не меняю, кажется, работает. Я в полной растерянности относительно того, что делать дальше...
Я посмотрел на них (и дюжину + других, которые на самом деле не были связаны):
Метод Laravel eloquent firstOrNew не обновляет и не вставляет
Спасибо за любую помощь или новые вопросы!
2 ответа
После изрядного количества осмотров я наконец нашел решение этой проблемы, основанное на этой проблеме, с которой я наткнулся. Я забыл, что в этой таблице есть составной ключ, который послужил источником этой проблемы.
Я включил это в свою настраиваемую модель поворота, чтобы переопределить значение по умолчанию laravel для "setKeysForSaveQuery":
class Contactable extends MorphPivot {... защищенная функция setKeysForSaveQuery (Builder $query) { $ запрос // Введите здесь соответствующие значения для ключей: -> где ('contactable_type', '=', $ this-> contactable_type) -> где ('contactable_ID', '=', $ this-> contactable_ID) -> где ('user_ID', '=', $ this-> user_ID); return $query; }... }
это сработало как шарм и устранило проблему, которая приводила к красноречивому созданию ...where '' is null and 'key_ID' = 235852
запрос
Я также сослался на следующее, что послужило основой для моего решения, но в основном не решало мою слишком сложную проблему составного ключа на настраиваемой полиморфной связи. Надеюсь, этот путь поможет кому-то другому.
Метод Laravel eloquent firstOrNew не обновляет и не вставляет
Создание и обновление Laravel Eloquent
https://github.com/laravel/framework/issues/2393
https://github.com/laravel/framework/issues/5355
Обновление модели Laravel с двумя первичными ключами
https://laravel.com/docs/5.7/migrations
Как я могу поместить составные ключи в модели в Laravel 5?
https://blog.maqe.com/solved-eloquent-doesnt-support-composite-primary-keys-62b740120f
https://www.reddit.com/r/laravel/comments/alrgwk/composite_key_in_table_only/
Я использовал это исправление в Laravel 5.4, очень похоже на предыдущий ответ Кевина Фостера и взято из https://github.com/laravel/framework/issues/5517
Вставьте это в свою модель Laravel для рассматриваемой таблицы - вставьте имена столбцов для составного ключа вместо column1 и column2
Моя проблема решена - спасибо предыдущему участнику
/**
* Set the keys for a save update query.
* This is a fix for tables with composite keys
* TODO: Investigate this later on
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
protected function setKeysForSaveQuery(Builder $query)
{
$query
//Put appropriate values for your keys here:
->where('column1', '=', $this->column1)
->where('column2', '=', $this->column2);
return $query;
}
Вам также нужно будет включить:
use \Illuminate\Database\Eloquent\Builder;