首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel Eloquent中,如何在联合作用域之外执行两个联合查询和一个选择?

在Laravel Eloquent中,如何在联合作用域之外执行两个联合查询和一个选择?
EN

Stack Overflow用户
提问于 2021-11-05 11:48:24
回答 2查看 46关注 0票数 0

Laravel雄辩的例子

代码语言:javascript
复制
        $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查询

代码语言:javascript
复制
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');只会覆盖select from left join联合。

附注:我简化了我的真实案例查询(删除了group by和特殊的连接条件等),但示例对于真实案例的使用可能没有意义,但演示仍然显示了问题-需要在联合作用域之外使用select语句。

EN

回答 2

Stack Overflow用户

发布于 2021-11-05 11:54:54

你应该试试这个。

代码语言:javascript
复制
$outSideQuery = DB::raw("({$unionedQuery->toSql()}) as smth")->select('name');
票数 0
EN

Stack Overflow用户

发布于 2021-11-05 12:06:00

要向查询中添加新的选择列,可以使用addSelect方法:

代码语言:javascript
复制
 $query->addSelect('name');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69852801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档