объединение и энергичная загрузка с Eloquent в Laravel - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица Uuids, которая имеет отношение морфа к таблице dealers, masterdealers, admins and customers.Мне нужно получить адреса электронной почты из всех вышеупомянутых таблиц пользовательских типов вместе с их uuids из таблицы uuids.я использую union, чтобы получать все электронные письма от дилеров, masterdealers, admins и клиентов table, но я хочу каким-то образом загружать их uuids тоже.

мой желаемый вывод будет примерно таким:

{
    email: 1@example.com
    uuid: 1
}, {
    email: 2@example.com
    uuid: 5
}, {
    email: 3@example.com
    uuid: 11
}

Я попробовал:

DB::select("SELECT email FROM customers
    UNION SELECT email FROM dealers
    UNION SELECT email FROM masterdealers
    UNION SELECT email FROM admins");

, и он дает мне все электронные письма из этих 4 таблиц.

1 Ответ

0 голосов
/ 12 июня 2018

Вам нужно присоединиться к вашей таблице морфов, чтобы получить uuids для ваших разных моделей

SELECT u.uuid,c.email 
FROM customers c
JOIN Uuids u ON c.id = u.some_mapped_col AND u.some_morph_col = 'Model Name'
UNION
SELECT u.uuid,d.email FROM dealers d
JOIN Uuids u ON d.id = u.some_mapped_col AND u.some_morph_col = 'Model Name'
UNION
SELECT u.uuid, m.email FROM masterdealers m
JOIN Uuids u ON m.id = u.some_mapped_col AND u.some_morph_col = 'Model Name'
UNION 
SELECT u.uuid, a.email FROM admins a
JOIN Uuids u ON a.id = u.some_mapped_col AND u.some_morph_col = 'Model Name'

Также для запуска необработанных запросов в laravel вам может понадобиться DB::raw('.....')

...