使用 Eloquent 在 mysql 中左连接后分别获取相同的命名列

Posted

技术标签:

【中文标题】使用 Eloquent 在 mysql 中左连接后分别获取相同的命名列【英文标题】:Get same named columns separately after left join in mysql using Eloquent 【发布时间】:2016-05-01 16:42:15 【问题描述】:

我有 2 张桌子,其中一张存储学生,另一张存储经理

学生有姓氏, 最终管理者也有namesurname

我还将 added_by 存储在学生表中,以检查哪个经理添加了学生。

通过查询我加入表格

   $students = \App\Student::with('payment')->with('discontinuities')
                ->leftJoin('managers','students.added_by','=','managers.id')
                ->get();

假设学生是

姓氏Added_by

乔恩·多伊 1

经理是

身份证姓名姓氏

1 简·多伊

所以当我使用上面给出的查询加入这两个表时。我的学生变成了

Jane doe,因为这 2 个表中存在名称冲突。 由于两个列的名称相同,只需将经理的姓名覆盖到学生的姓名即可。

我实际上只能加入 manager 表中的一些列,但是我需要这个 name 列来打印出带有 manager 名称的 add_by 列 当然,我可以将列名更改为表中的其他名称,但这会做太多工作,因为我必须一个一个地重构我的应用程序中的每个查询,并且还要从头开始测试所有内容

所以我的问题是如何加入这 2 个表并防止同名列发生冲突?

【问题讨论】:

【参考方案1】:

试试这个:

$students = \App\Student::with('payment')->with('discontinuities')
    ->leftJoin('managers','students.added_by','=','managers.id')
    ->select('students.*','managers.name as m_name','managers.surname as m_s_name','managers.other_column_if_needed','managers.another_column_if_needed')
    ->get();

这样您的managers 表的name 列将被视为m_namesurname 列将被视为m_s_name

【讨论】:

哦,我不知道加入后我可以更改列名。谢谢【参考方案2】:

我今天早些时候遇到了一个类似的问题,“get”方法接受了一个列名数组,您希望在结果中作为参数。因此,为了防止冲突,您必须为这些列提供一个别名,如下所示:

$students = \App\Student::with('payment')->with('discontinuities')
->Join('managers','students.added_by','=','managers.id')
->get(['students.*', 'managers.name as managers_name', 'managers.surname as managers_surname', 'managers.other_column_if_needed']);

【讨论】:

【参考方案3】:

我的猜测是您应该在查询的get() 部分中指定列名和表。

示例:

$students = \App\Student::with('payment')->with('discontinuities')
    ->leftJoin('managers','students.added_by','=','managers.id')
    ->get(['managers.Name', 'managers.Surname', 'students.name', 'students.surname']);

【讨论】:

以上是关于使用 Eloquent 在 mysql 中左连接后分别获取相同的命名列的主要内容,如果未能解决你的问题,请参考以下文章

mysql中左连接后,最终的记录数大于左边表的记录分析

使用 Laravel Eloquent 连接同一服务器上不同数据库中的两个 MySQL 表

Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?

用 Laravel/Eloquent 为 Yajra DataTables 编写连接查询的慢 MySQL

如何使用 Laravel 4 Eloquent 连接列?

如果另一个连接为空,Laravel Eloquent 和 Mysql 连接一个表