在 Laravel Eloquent 中,你如何在联合范围之外进行两个联合查询和一个选择?
Posted
技术标签:
【中文标题】在 Laravel Eloquent 中,你如何在联合范围之外进行两个联合查询和一个选择?【英文标题】:In Laravel Eloquent how could you do two union queries and a select outside the union scope? 【发布时间】:2021-12-19 11:34:53 【问题描述】:Laravel Eloquent 示例
$union = User::select([
DB::raw("id"),
DB::raw("name")
])
->rightJoin("roles as t2", function ($join)
$join->on("users.role_id", '=', "t2.id");
);
$query = User::select(
[
DB::raw("id"),
DB::raw("name")
]
)
->leftJoin('roles', function ($join)
$join->on("users.role_id", '=', "roles.id");
)
->union($union);
$query->select('name');
我想使用 Laravel 重现 mysql 查询
select name from
((select id, name
from `users`
left join `roles` on `users`.`role_id` = `roles`.`id`)
union
(select id, name
from `users`
right join `roles` as `t2` on `users`.`role_id` = `t2`.`id`)
) as smth;
但是使用$query->select('name');
只是覆盖了左连接联合中的选择。
附:我简化了我的真实案例查询(删除了 group bys 和特殊连接条件等),当示例可能对真实案例使用没有意义时,但演示仍然显示问题 - 需要在联合范围之外有一个 select 语句.
【问题讨论】:
【参考方案1】:你应该试试这个。
$outSideQuery = DB::raw("($unionedQuery->toSql()) as smth")->select('name');
【讨论】:
【参考方案2】:要向查询中添加新的选择列,您可以使用addSelect 方法:
$query->addSelect('name');
【讨论】:
以上是关于在 Laravel Eloquent 中,你如何在联合范围之外进行两个联合查询和一个选择?的主要内容,如果未能解决你的问题,请参考以下文章
如何在你已经获得的东西上使用 Laravel Eloquent ::with()?
如何使用 eloquent 在 laravel 中编写多个连接