Наблюдаю сейчас неожиданную вещь. В базе данных в разных таблицах некоторые записи получают значения NULL в полях created_at и updated_at. Закономерность понять пока не смог. Чаще всего обнулены оба поля: http://i.piccy.info/i9/ad763b5e450b658e4547b5414b156191/1557687406/114867/1314571/sql01.png Но бывает, что только одно: http://i.piccy.info/i9/4d87d0c404978c4d7fd0918491ddf9df/1557687435/30642/1314571/sql02.png Это стандартные поля, они должны обрабатываться автоматически. Я их специально не настраиваю, в базу они добавляются просто благодаря стандартной команде timestamps() в миграции: Код (Text): Schema::create('my_table', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); ... Вроде до какого-то момента, эти поля всегда заполнялись четко. Но сейчас заметил, что они обнуляются. Понять причину не могу. Это происходит на двух хостах - и на машине разработчика, и на тестовом сервере. Базы данных, естественно, разные. В чем может быть проблема?
В общем, проблемное место такое. Генерируется такой запрос: Код (Text): insert into `notify_channels` (`user`, `channel_type`, `value`, `is_confirm`) values (?, ?, ?, ?) [8, 1, rswind@ya.ru, 1] В нем нет времени. И поэтому поля со временем устанавливаются в NULL. Его генерит через ORM вот такой код: Код (Text): NotifyChannel::insert( [ 'user' => $userId, 'channel_type' => $emailTypeId, 'value' => Auth::user()->email, 'is_confirm' => true ]); Вроде как ORM должен добавлять время (другие такие же ORM-вызовы устанавливают время нормально). Особенность этого вызова в том, что он происходит в обработчике события входа пользователя. Файл /app/Listeners/UserEventListener.php, метод handle(). Еще один QRM-запрос в том же методе тоже не заполняет поля со временем. Почему?
@xintrea покажи как выглядит класс-модель. Чтобы таймстампы в eloquent работали, чтобы попадали в генерируемый SQL, надо - чтобы НЕбыло public $timestamps = false; - чтобы НЕбыло упоминания этих полей в $fillable тогда будут работать умолчания насчёт них. --- Добавлено --- Ну и конечно если где-то ты используешь сырые запросы INSERT/UPDATE, то там ты сам отвечаешь за заполнение этих полей.
timestamps заполняются через глобальные наблюдатели. Ты своим запросом не создаёшь экземпляра модели, поэтому они не вызываются. Вот прямо точно такие же? По коду вроде видно, что insert не создаёт экземпляра модели.
Точняк! Всё что выше в силе, но плюс есть разница: Model::insert vs. Model::create https://github.com/laravel/framework/issues/22502#issuecomment-353361827