在 laravel 中使用 eloquent 联合和预加载
union and eager loading with eloquent in laravel
我有一个 table Uuids
与 dealers, 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('.....')
我有一个 table Uuids
与 dealers, 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('.....')