Почему этот запрос не работает?
public function actionInsert()
{
$model = new NotificationsEvents();
$date_at = (new Query())
->select(['single-events.date_at'])
->from('single-events')
->leftJoin('user', 'user.birthday = single-events.date_at');
$event_id = (new Query())
->select(['single-events.id'])
->from('single-events')
->leftJoin('user', 'user.id = single-events.id');
(new Query())->createCommand()->insert('notifications_events', [
'type' => 7,
'date_at' => $date_at,
'event_id' => $event_id,
])->execute();
}
Мне нужно вставить день рождения пользователя в notifications_events.date_at
и идентификатор пользователя в notifications_events.event_id
, но этот код не работает:
Unknown column 'single' in 'on clause'
Используйте подчеркивание (_) в качестве разделителя для имен таблиц и столбцов.
single-events
не является допустимым/безопасным именем для таблицы, так как оно содержит -
. Вы должны либо процитировать его во всех возможных местах:
public function actionInsert() {
$model = new NotificationsEvents();
$date_at = (new Query())
->select(['{{single-events}}.date_at'])
->from('single-events')
->leftJoin('user', 'user.birthday = {{single-events}}.date_at');
$event_id = (new Query())
->select(['{{single-events}}.id'])
->from('single-events')
->leftJoin('user', 'user.id = {{single-events}}.id');
(new Query())->createCommand()->insert('notifications_events', [
'type' => 7,
'date_at' => $date_at,
'event_id' => $event_id,
])->execute();
}
Или используйте более практичное имя для таблицы, например single_events
.
Другой метод цитирования: использование обратных кавычек:
`single-events`
Если у вас действительно есть таблица, называемая одиночными событиями, вам следует избежать ее (или еще лучше изменить имя таблицы), в вашем случае mysql интерпретирует тире как минус и видит одиночное как имя столбца,