加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

PHP编程:PHP中Laravel 关联查询返回错误id的解决方法

发布时间:2020-12-14 19:53:49 所属栏目:大数据 来源:网络整理
导读:《PHP中Laravel 关联查询返回错误id的解决方法》要点: 本文介绍了PHP中Laravel 关联查询返回错误id的解决方法,希望对您有用。如果有疑问,可以联系我们。 在 Laravel Eloquent 中使用 join 关联查询,如果两张表有名称相同的字段,如 id,那么它的值会默认被

《PHP中Laravel 关联查询返回错误id的解决方法》要点:
本文介绍了PHP中Laravel 关联查询返回错误id的解决方法,希望对您有用。如果有疑问,可以联系我们。

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

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','desc')
 ->get();

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

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

查询结果如图:

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

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

PHP

$priority = Priority::select(['priorities.*','touch.name','touch.add_user'])
 ->rightJoin('touch','desc')
 ->get();
$priority = Priority::select(['priorities.*','desc')
 ->get();

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

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

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

Laravel 版本:5.3

链接:https://github.com/laravel/framework/issues/4962

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读