laravel - перекрестное соединение, не возвращающее все столбцы - PullRequest
0 голосов
/ 06 мая 2018
╔═══╦══════════════╦═════════════╗
║   ║id            ║name         ║
╠═══╬══════════════╬═════════════╣
║   ║ 1            ║a1           ║
║   ║ 2            ║b1           ║
║   ║ 3            ║b2           ║
║   ║ 4            ║c1           ║
║   ║ 5            ║c2           ║
╚═══╩══════════════╩═════════════╝

Это моя таблица в MySQL

Выполнение этого запроса в mysql:

select * from (select * from courses where name like 'a%') as t1 cross join (select * from courses where name like 'b%') as t2 cross join (select * from courses where name like 'c%') as t3

возвращает это:

enter image description here

Однако, когда я пытаюсь запустить его на larael для отображения результата, я получаю что-то другое.

Вот как я выполняю в Laravel:

$posts = DB::select(DB::raw("select * from (select * from courses where name like 'a%') as t1 cross join (select * from courses where name like 'b%') as t2 cross join (select * from courses where name like 'c%') as t3"));

Вот что $posts возвращает:

[{"id":4,"name":"c1"},{"id":4,"name":"c1"},{"id":5,"name":"c2"},{"id":5,"name":"c2"}]

Полагаю, он возвращает только два последних столбца запроса, если мы сравним его с исходным результатом, возвращаемым в mysql.

Есть идеи, как получить полный результат?

1 Ответ

0 голосов
/ 06 мая 2018

t3 заменяет значения t1 и t2. Вы должны использовать псевдонимы:

select t1.id as t1_id, t1.name as t1_name,
    t2.id as t2_id, t2.name as t2_name,
    t3.id as t3_id, t3.name as t3_name

Вы должны также использовать построитель запросов вместо исходного SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...