在Laravel中使用冲突的列名连接三个表

时间:2016-03-15 18:02:56

标签: mysql sql laravel laravel-5.1

我有三个表,以下是相关列:

events
 id
 name
 location_id
 org_id

locations
 id
 name

orgs
 id
 name

以下是我的控制器中的查询构建器:

$events = DB::table('events')
                ->join ('locations', 'events.location_id', '=', 'locations.id')
                ->join('orgs', 'events.org_id', '=', 'orgs.id')
                ->select('events.id', 'events.name', 'orgs.name', 'locations.name')
                ->get();
    return response()->json($events);

因此输出:

[{"id":"2","name":"HUB 123"}, {"id":"3","name":"HUB Lounge"}]

应该是:

 [{"id":"2","name":"Some cool event","org":"Student Senate","location":"HUB 123"}, {"id":"3","name":"Some other cool event","org":"Some club","location":"HUB Lounge"}]

看起来,因为所有三个表都有一个'name'列,所以要选择的最后一列会覆盖它之前的那一列。显然这不是我想要的。

有没有办法在查询编译器中为列提供一个类似于普通MySQL中的AS的新名称?这会解决我的问题吗?请举例说明你的答案。我不是MySQL专家,而且我是Laravel的初学者。我只是想设置一个基本的API来与我的实际项目一起使用。

谢谢!

1 个答案:

答案 0 :(得分:1)

别名列

$events = DB::table('events')
            ->join ('locations', 'events.location_id', '=', 'locations.id')
            ->join('orgs', 'events.org_id', '=', 'orgs.id')
            ->select('events.id', 'events.name as event_name', 'orgs.name as org', 'locations.name as location')
            ->get();
return response()->json($events);