在 laravel 中使用 eloquent 联合和预加载

union and eager loading with eloquent in laravel

我有一个 table Uuidsdealers, masterdealers, admins and customers table 有变形关系。我需要从上述所有用户类型 table 中获取电子邮件地址,以及从 uuid table 中获取他们的 uuid。我正在使用 union 获取来自经销商、masterdealers、管理员和客户的所有电子邮件 table 但我也想以某种方式急切加载他们的 uuid。

我想要的输出是这样的:

{
    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 tables 的所有电子邮件。

您需要加入您的 morph table 以获得不同模型的 uuid

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('.....')