【问题标题】:union and eager loading with eloquent in laravel在 laravel 中用雄辩的联合和急切加载
【发布时间】:2018-06-12 07:17:55
【问题描述】:

我有一个表Uuids,它与dealers, masterdealers, admins and customers 表有变形关系。我需要从上述所有用户类型表中获取电子邮件地址,以及从 uuids 表中获取他们的 uuid。我正在使用 union 来获取来自经销商、masterdealers、管理员和客户表的所有电子邮件,但我也想以某种方式预先加载他们的 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 个表格中的所有电子邮件。

【问题讨论】:

  • 你已经尝试了什么?请分享您的代码
  • 请将其添加到您的答案中,以便我们将所有信息保存在一个地方
  • @Derek 我已将其添加到问题中
  • 你试过这个吗:SELECT email, uuid FROM ...
  • 另外,为每个用户使用数字 ID 会更有意义,因为如果用户需要更改他/她的电子邮件会发生什么?

标签: laravel eloquent union eager-loading


【解决方案1】:

您需要加入您的变形表,以便为您的不同模型获取 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('.....')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2013-09-22
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多