PHP为什么查不到id,PHP中Laravel 关联查询返回错误id的解决方法

在 Laravel Eloquent 中使用 join 关联查询,如果两张表有名称相同的字段,如 id,那么它的值会默认被后来的同名字段重写,返回不是期望的结果。例如以下关联查询:

PHP

$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')

->where('priorities.type', 1)

->orderBy('priorities.total_score', 'desc')

->orderBy('touch.created_at', 'desc')

->get();

$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')

->where('priorities.type', 1)

->orderBy('priorities.total_score', 'desc')

->orderBy('touch.created_at', 'desc')

->get();

priorities 和 touch 这两张表都有 id 字段,如果这样构造查询的话,返回的查询结果如图:

525f7bdbaae41d111385796a2bd7706a.png

Laravel 关联查询返回错误的 id

这里 id 的值不是 priorities 表的 id 字段,而是 touch 表的 id 字段,如果打印出执行的 sql 语句:

select * from `priorities`

right join `touch`

on `priorities`.`touch_id` = `touch`.`id`

where `priorities`.`type` = '1'

order by `priorities`.`total_score` desc, `touch`.`created_at` desc

select * from `priorities`

right join `touch`

on `priorities`.`touch_id` = `touch`.`id`

where `priorities`.`type` = '1'

order by `priorities`.`total_score` desc, `touch`.`created_at` desc

查询结果如图:

bf743e883c9f3b86d45648479ed9667a.png

使用 sql 查询的结果实际上是对的,另外一张表重名的 id 字段被默认命名为 id1,但是 Laravel 返回的 id 的值却不是图中的 id 字段,而是被重名的另外一张表的字段重写了。

解决办法是加一个 select 方法指定字段,正确的构造查询语句的代码:

PHP

$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user'])

->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')

->where('priorities.type', 1)

->orderBy('priorities.total_score', 'desc')

->orderBy('touch.created_at', 'desc')

->get();

$priority = Priority::select(['priorities.*', 'touch.name', 'touch.add_user'])

->rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')

->where('priorities.type', 1)

->orderBy('priorities.total_score', 'desc')

->orderBy('touch.created_at', 'desc')

->get();

这样就解决了问题,那么以后就要注意了,Laravel 两张表 join 的时候返回的字段最好要指定。

这算不算是 Laravel 的一个 bug 呢?如果一个字段的值被同名的字段值重写了,这种情况要不要报一个错误出来,而不能默认继续执行下去。

github 上有人也提出了同样的问题,作者也提供了解决办法,但并没其他更好的方案。

Laravel 版本:5.3

以上所述是小编给大家介绍的Laravel 关联查询返回错误的 id的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值