Laravel雄辩 - 在连接表时防止覆盖值

时间:2014-06-03 14:51:07

标签: php join laravel eloquent

好的,所以我有两个模型:AccountRole

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');
  }

}

和数据库表:accountrole

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

此后,idname的值在雄辩的集合中不正确。

此外,我需要返回是雄辩的类型模型,因为我在JSON中返回响应,重要的是稍后在JS中(在解析JSON之后)我可以只做account.role.name

更改表格中的字段名称(例如:id - > account_id和:id - > role_id)将是一种解决方法,但这不是我的情况 - 需要将主键命名为{{1每个表都有。

[编辑] 是的,所以问题很简单:如何解决这个问题?

3 个答案:

答案 0 :(得分:20)

您可以使用'选择'就像在普通的SQL查询中一样:

$response = Account::with('role')
    ->select('account.*')
    ->leftJoin('group', 'group.id', '=', 'account.group_id')
    ->get();

http://laravel.com/docs/queries#selects

答案 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();