Laravel - 加入然后别名两列

Posted

技术标签:

【中文标题】Laravel - 加入然后别名两列【英文标题】:Laravel - Join then alias two column 【发布时间】:2022-01-20 06:10:43 【问题描述】:

我有一个 sql 可以像这样调用我的表:

$media = MediaOrder::join('users','users.nik','=','media_order.created_by')
                ->select('media_order.*','users.nickname AS nama1')
                ->where('media_order.group_id','=', auth()->user()->group_id)
                ->get();

然后我使用此别名替换表media_ordercreated_by 列的nik,将其替换为表nickname 中的nickname,如下所示:

->editColumn('created_by', function ($row) 
                        return $row->nama1;           
                      ) 

它工作正常,结果如下:

但后来我的表中有另一列称为traffic_viewed_by,它也使用表media_order 中的nik 列,如下所示:

它仍然使用nik 作为表,我不知道如何使用表users 中的nickname 显示它,然后在我的表中显示它,我不知道该怎么做,有人有解决方案或替代方法吗?非常感谢任何帮助,谢谢!

【问题讨论】:

【参考方案1】:

要让另一个用户进入另一个列,您还需要加入另一个用户。由于您要加入 users 两次,因此它们每个都需要一个唯一的名称,以便 SQL 可以理解您要执行的操作。

$media = MediaOrder::join('users as created_by_user','created_by_user.nik','=','media_order.created_by')
                ->join('users as viewed_by_user','viewed_by_user.nik','=','media_order.traffic_viewed_by')
                ->select('media_order.*','created_by_user.nickname AS nama1', 'viewed_by_user.nickname AS nama2')
                ->where('media_order.group_id','=', auth()->user()->group_id)
                ->get();

【讨论】:

你好,代码运行良好,谢谢!,但有一些问题,比如我的traffic_viewed_by 中有一些 NULL 值,所以表只获取那些在 @ 中有值的行987654324@,有没有办法让这些行显示出来?再次感谢。 你可以添加一个->whereNotNull('media_order.traffic_viewed_by') 这是我一直在尝试的,但遗憾的是它仍然得到traffic_viewed_by不为NULL的行,并道歉我错了$media = MediaOrder::join('users as created','created.nik','=','media_order.created_by')->join('users as viewed','viewed.nik','=','media_order.traffic_viewed_by')->select('media_order.*','created.nickname AS nama1', 'viewed.nickname AS nama2')->where('media_order.group_id','=', auth()->user()->group_id)->whereNotNull('media_order.traffic_viewed_by')->get(); 那么 - 您保存在 traffic_viewed_by 中的是 null 还是空字符串?如果是第一种情况->where('media_order.traffic_viewed_by', '!=', '') 订单创建时为NULL,所以当查看用户流量时,会将nik的值保存到traffic_viewed_by,然后在数据库中更新。跨度>

以上是关于Laravel - 加入然后别名两列的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Laravel 5 验证规则中为输入名称取别名?

laravel-路由配置的别名作用

如何在Laravel中的多对多关系中添加“别名”?

想比较laravel中不同表的两列

Laravel查询两列之和之差

Laravel 关系一到两列