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_order
中created_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 - 加入然后别名两列的主要内容,如果未能解决你的问题,请参考以下文章