Левое соединение в запросе выбора Yii2 - Неизвестный столбец «один» в «предложении on»

Почему этот запрос не работает?

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'

Если у вас действительно есть таблица, называемая одиночными событиями, вам следует избежать ее (или еще лучше изменить имя таблицы), в вашем случае mysql интерпретирует тире как минус и видит одиночное как имя столбца,

P.Salmon 23.06.2019 12:25

Используйте подчеркивание (_) в качестве разделителя для имен таблиц и столбцов.

Harish ST 23.06.2019 16:03
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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`

Другие вопросы по теме