我有两张table,其中一张是商店的学生,另一张是经理
学生有名姓,最终经理也有名和姓。
我还将**added_by* 存储在students表中,以检查哪个管理器添加了学生。
使用查询I连接表
$students = \App\Student::with('payment')->with('discontinuities')
->leftJoin('managers','students.added_by','=','managers.id')
->get();
假设学生是
姓名姓名添加人
Jon Doe 1
经理是
身份证名姓
1个无名女尸
因此,当我用上面给予的查询连接这两个表时。我的学生成为
Jane doe,因为这两个表中的名称冲突。
由于两个列的名称相同,因此只需将管理员的名称覆盖到学生的名称。
我实际上可以只连接managers表中的一些列,但是我需要这个name列来打印出带有managers名称的added_by列,当然我可以将表中的列名更改为其他内容,但是这将是太多的工作,因为我必须逐个重构应用程序中的每个查询,并且从头开始测试所有内容
所以我问题是如何连接这两个表并防止同名列的冲突?
4条答案
按热度按时间fkaflof61#
请尝试使用此:
这样,
managers
表的name
列将被视为m_name
,surname
列将被视为m_s_name
lrpiutwd2#
我今天早些时候遇到了一个类似的问题,'get'方法接受了一个列名称数组,你想在结果中作为参数。因此,为了防止冲突,你必须给予这些列一个别名,如下所示:
whitzsjs3#
我的猜测是,您应该在查询的
get()
部分指定列名和表。例如:
4szc88ey4#
多年以后。我在google上搜索的时候发现了这个
要使查询采用初始表列而不是连接的表列。假设连接的表有一个别名't_alias',初始表名为'table_name',在连接后添加一行:
这应该可以防止超控。
注意:如果需要,切换这些指令将反转效果。