Laravel: при выполнении LEFT JOIN, как сделать псевдоним полей, чтобы я мог получить доступ к полям с тем же именем - PullRequest
0 голосов
/ 12 мая 2019

У меня есть таблица «master», допустим, что-то вроде:

id       autoincrement
name     varchar(10)
category integer

Затем у меня есть таблица «detail», скажем:

id        autoincrement
master_id integer
qty       integer

Я хочусделать LEFT JOIN, как:

SELECT * FROM master
LEFT JOIN detail ON master.id = detail.master_id
WHERE category=1

Этот запрос производит именно то, что я хочу в SQL: таблица со всеми основными записями, даже если они не имеют детализации, в этом случае я получу столбцы детализациис NULL, что является правильным.

Теперь в Laravel я хочу сделать что-то вроде:

$records = Master::where('category', '=', 1)
             ->leftJoin('detail', 'master.id', '=', 'detail.master_id')

Если таблица сведений пуста, она возвращает идентификатор как NULL

Я думаю, что это потому, что он возвращает id дважды, сначала master.id, а затем второй id, который приходит из таблицы сведений, конечно, NULL

Так как я могу псевдонимпервый (или второй идентификатор) для доступа к нему?

1 Ответ

1 голос
/ 12 мая 2019

Вы можете получить все столбцы из основной таблицы, а также выбрать и псевдоним каждого из столбцов таблицы сведений, который вам нужен отдельно, в select.Вы правы в том, что он отменяет их из-за одних и тех же имен.Попробуйте следующее:

$records = Master::where('category', '=', 1)
             ->select('master.*', 'detail.id as detail_id')
             ->leftJoin('detail', 'master.id', '=', 'detail.master_id')

Имейте в виду, что в результатах будет просто показан идентификатор таблицы подробностей вместе со всеми столбцами основной таблицы, вы должны добавить другие столбцы таблицы подробностей в виде * 1005.* параметры.

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