Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:当进行左连接时,如何创建字段别名,以便我可以访问同名字段_Php_Sql_Laravel - Fatal编程技术网

Php Laravel:当进行左连接时,如何创建字段别名,以便我可以访问同名字段

Php Laravel:当进行左连接时,如何创建字段别名,以便我可以访问同名字段,php,sql,laravel,Php,Sql,Laravel,我有一张“主”桌,比如说: id autoincrement name varchar(10) category integer $records = Master::where('category', '=', 1) ->leftJoin('detail', 'master.id', '=', 'detail.master_id') 然后我有一个“细节”表,比如说: id autoincrement master_id in

我有一张“主”桌,比如说:

id       autoincrement
name     varchar(10)
category integer
$records = Master::where('category', '=', 1)
             ->leftJoin('detail', 'master.id', '=', 'detail.master_id')
然后我有一个“细节”表,比如说:

id        autoincrement
master_id integer
qty       integer
我想做一个左连接,如:

SELECT * FROM master
LEFT JOIN detail ON master.id = detail.master_id
WHERE category=1
这个查询生成的正是我在SQL中想要的:一个包含所有主记录的表,即使它们没有详细信息,在这种情况下,也会得到包含NULL的详细信息列,这是正确的

现在在拉威尔,我想做一些类似的事情:

id       autoincrement
name     varchar(10)
category integer
$records = Master::where('category', '=', 1)
             ->leftJoin('detail', 'master.id', '=', 'detail.master_id')
如果详细信息表为空,则它将id返回为NULL

我认为这是因为它返回两次
id
,首先是
master.id
,然后是来自detail表的第二个
id
,当然是空的


那么,如何为第一个(或第二个id)设置别名以访问它呢?

您可以从主表中获取所有列,并在
选择中分别选择和别名所需的每个详细信息表列。您是对的,它会因为相同的名称而覆盖它们。所以试试这个:

$records = Master::where('category', '=', 1)
             ->select('master.*', 'detail.id as detail_id')
             ->leftJoin('detail', 'master.id', '=', 'detail.master_id')

请记住,这只会在结果中显示明细表ID以及所有主表列,您应该将明细表中的其他列添加为
select
参数。

非常感谢。我刚刚发现我可以使用
->addSelect(['master.id as mid','name',…])
,但是你的
*
看起来好多了!