php - Laravel eloquent - 防止连接表时覆盖值

标签 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

现在的情况是:

我需要按 role.name 列对 accounts 进行排序。但在 join(或 leftJoin)之后,值会被第二个表中的值覆盖。这是一些代码:

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

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

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

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

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

最佳答案

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

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

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

关于php - Laravel eloquent - 防止连接表时覆盖值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018304/

相关文章:

php - 创建 Joomla 用户配置文件插件

mysql - 加入 "most recent row"的最有效方式

MySQL根据列值查询JOIN表

mysql - 如何在 4 个表上创建外连接以获取所有值加上 1 个字段的计数

laravel - 如何定义到同一个 Controller 的两条不同路由?

php - 在下拉列表中显示预先选择的值

php - CodeIgniter 错误输出 num_rows == 1

php - 在 Laravel 中选择字段的更简洁方法

laravel - 如何仅使用 Y-m-d 部分按 created_at 日期从集合中获取项目?

php - Cakephp修改Join查询以添加计数而不是获取表的所有详细信息