mysql - 在 Laravel 中加入具有冲突列名的三个表

标签 mysql sql laravel laravel-5.1

我有三个表,这里是相关的列:

events
 id
 name
 location_id
 org_id

locations
 id
 name

orgs
 id
 name

这是我的 Controller 中的查询生成器:

$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"}]

看起来,因为所有三个表都有一个“名称”列,所以要选择的最后一列将覆盖之前的列。显然这不是我想要的。

有没有办法在查询生成器中给列一个新名称,类似于普通 MySQL 中的 AS?这甚至可以解决我的问题吗?请举例说明您的回答。我不是 MySQL 专家,我是 Laravel 的初学者。我只是想设置一个基本的 API 以用于我的实际项目。

谢谢!

最佳答案

别名列

$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);

关于mysql - 在 Laravel 中加入具有冲突列名的三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36018801/

相关文章:

node.js - NPM 安装错误 (Laravel)

mysql - 用于获取表列数的 hibernate 查询

MySQL WHERE `character` = 'a' 匹配 a、A、à 等。为什么?

sql - 两个几乎相同的查询返回不同的结果

java - 批量删除抛出QueryCollectorSignal异常?

php - 如何获得 Laravel 关系中的第一行

php - 在回调之外获取 Laravel Excel block 结果

mysql - 合并两个 MySQL 查询并替换结果

mysql:用与前一行相同的数字更新增量序列号

PHP通过实例变量从数据库获取多语言数据