Laravel雄辩-防止在连接表时覆盖值 [英] Laravel eloquent - prevent overriding values when joining tables

查看:64
本文介绍了Laravel雄辩-防止在连接表时覆盖值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

现在事情是:

我需要通过 role.name 列订购帐户.但是在连接(或leftJoin)之后,第二个表中的值将覆盖它们.这是一些代码:

And now the thing is:

I need to order accounts by role.name column. But after join (or leftJoin) values are overriden by those from second table. Here's some code:

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

此后,雄辩的集合中 id name 的值不正确.

After that values for id and name are incorrect in eloquent collections.

此外,我需要返回的是雄辩的类型模型,因为我要返回JSON中的响应,在此,稍后在JS中(解析JSON之后),我只能执行 account.role.name,这一点很重要.

Also, i need the return to be eloquent type models as i'm returning back the response in JSON, where it is important that later in JS (after parsing JSON) i can do just account.role.name.

更改表中字段的名称(例如:id-> account_id和:id-> role_id)将是一种解决方法,但这不是我的情况-需要具有名为 id 的主键每张桌子.

Changing names of fields in tables (like: id -> account_id, and: id -> role_id) would be an workaround, but that's not my case - need to have primary key named id for every table.

是的,问题很简单:如何解决该问题?

[edit] Yep, so the question is simply: how to solve that problem?

推荐答案

您可以像在普通SQL查询中一样使用'select':

You can use 'select' like you would in a normal SQL query:

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

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

这篇关于Laravel雄辩-防止在连接表时覆盖值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆