#laravel #eloquent #laravel-8
#laravel #красноречивый #laravel-8
Вопрос:
Я уже несколько часов дергаю себя за волосы, пытаясь найти проблему с этими строками кода:
ContentSetting::updateOrCreate(
['content_id' => $this->id, 'key' => 'max_width'],
['value' => $value]
);
Предполагается проверить, есть ли в моей таблице content_settings строка с определенным идентификатором содержимого и ключом «max_width», и если да, обновите ее, а если нет, создайте ее. Он используется в модельном мутаторе, отсюда и $this .
В любом случае, независимо от того, какие значения я пытаюсь ввести, это ВСЕГДА приводит к выполнению этого запроса mysql (только с разными временными метками):
insert into `content_settings` (`content_id`, `updated_at`, `created_at`) values (2, '2020-10-15 14:07:00', '2020-10-15 14:07:00')
…просто создание новых строк с пустым ключом и значением. Может кто-нибудь, пожалуйста, определить ошибку? Или это где-то ошибка? Что-то с «ключом», являющимся зарезервированным словом?
Комментарии:
1. как насчет $fillable в вашей модели настройки содержимого? содержит ли он ключ и значение?
2. Дох! Я ЗНАЛ, что это будет что-то совершенно очевидное. Конечно! Большое спасибо!
3. Пожалуйста, я добавлю свой ответ, чтобы мы могли закрыть этот вопрос
Ответ №1:
вы должны установить поля, которые вы хотите использовать при массовом присвоении, в массиве $fillable в вашей модели:
class ContentSetting extends Model
{
protected $fillable = ['content_id','key','value'];
}
Комментарии:
1. Просто для записи: было бы неплохо, если бы Laravel каким-то образом сигнализировал об этом. Это сэкономило бы мне час или два…