Laravel SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец '0' в - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю над Laravel блогом, и на данный момент я хочу изменить статус статуса Post на основе определенного условия, используя событие. В моей миграции у меня есть таблица enum post_status со статусами, которые я хочу использовать, и я подключил событие и слушателя, а также настроил dispatchesEvents с использованием retrieved, поэтому я ничего не публикую.

Я хочу изменить сообщения, которые в настоящее время имеют статус «Полное И» старше 90 дней, на «Архивный». Для этого я использую код ниже. Статус фактически обновляется на основе первого условия, но я не уверен, что второе условие учитывается (или оно правильно определено), я догадываюсь, что проблема связана с последней строкой. Это код в слушателе:

public function handle(PostStatusUpdaterEvent $event)
{
  $old_date = Carbon::now()->subDays(90);

  Post::where(['post_status' => 3]) // 3 = Complete status
      ->where(['end_date', '<', $old_date]) 
      ->update(['post_status' => 4]); // 4 = Archived status

}

И ошибка:

lluminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: update 
`posts` set `post_status` = 4, `posts`.`updated_at` = 2020-02-24 13:13:15 where 
(`post_status` = 3) and (`0` = end_date and `1` = < and `2` = 2019-11-26 13:13:15))

У меня есть поле post_status в моем защищенном массиве с возможностью заполнения, а также защищена сама таблица. Также попытался установить поле post_status в массиве защищенных добавлений, также попытался установить идентификатор таблицы как скрытый, ни один из которых не сработал. Наконец, у меня есть модель и пространство имен Carbon, импортированные в слушатель (как при использовании ...)

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Вы бы использовали массив в, где, только если вы хотите запустить несколько проверок в одном и том же месте, где WHERE (`post_status` = 3 AND `end_date` = '2019-11-26 13:13:15')

Правильный код для этого будет

Post::where([
        ['post_status', 3], // 3 = Complete status
        ['end_date', '<', $old_date],
    ]) 
    ->update(['post_status' => 4]); // 4 = Archived status

Для получения WHERE `post_status` = 3 AND `end_date` < '2019-11-26 13:13:15'
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 101 * * * * * 1.

0 голосов
/ 24 февраля 2020

Измените вторую where на эту:

where('end_date', '<', $old_date) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...