Account
和Role
class Account extends Eloquent
{
protected $table = 'account';
/* [...] */
public function group() {
return $this->belongsTo('Group');
}
}
class Role extends Eloquent {
protected $table = 'role';
public function accounts() {
return $this->hasMany('Account');
}
}
account
和role
account
-------
id
name
role_id (nullable)
role
----
id
name
我需要在accounts
列前订购role.name
。但是在join(或leftJoin)之后,第二个表中的值会覆盖这些值。这是一些代码:
$response = Account::with('role')->leftJoin('group', 'group.id', '=', 'account.group_id')->get();
此后,id
和name
的值在雄辩的集合中不正确。
此外,我需要返回是雄辩的类型模型,因为我在JSON中返回响应,重要的是稍后在JS中(在解析JSON之后)我可以只做account.role.name
。
更改表格中的字段名称(例如:id - > account_id和:id - > role_id)将是一种解决方法,但这不是我的情况 - 需要将主键命名为{{1每个表都有。
[编辑] 是的,所以问题很简单:如何解决这个问题?
答案 0 :(得分:20)
您可以使用'选择'就像在普通的SQL查询中一样:
$response = Account::with('role')
->select('account.*')
->leftJoin('group', 'group.id', '=', 'account.group_id')
->get();
答案 1 :(得分:1)
补充 @beech 给出的答案,您可以在select子句中使用别名,这样您就可以只获取所需的特定键。
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
答案 2 :(得分:0)
如果要选择所有字段并避免覆盖特定表,请将其添加为最后一个选择表
->select('group.*', 'account.*')
。
$response = Account::with('role')
->select('group.*', 'account.*')
->leftJoin('group', 'group.id', '=', 'account.group_id')
->get();