Pergunta

Ok, então eu tenho os seguintes dois modelos: Account e Role

class Account extends Eloquent
{
  protected $table = 'account';

  /* [...] */

  public function group() {
    return $this->belongsTo('Group');
  }
}

e

class Role extends Eloquent {

  protected $table = 'role';

  public function accounts() {
    return $this->hasMany('Account');
  }

}

e tabelas de banco de dados: account e role

account
-------
id
name
role_id (nullable)

role
----
id
name

E agora a questão é:

Eu preciso fazer um pedido accounts por role.name coluna.Mas após o join (ou leftJoin) os valores são substituídos pelos da segunda tabela.Aqui está um código:

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

Depois disso valores para id e name estão incorretos em coleções eloquentes.

Além disso, preciso que o retorno seja de modelos do tipo eloquente, pois estou retornando a resposta em JSON, onde é importante que mais tarde em JS (depois de analisar JSON) eu possa fazer apenas account.role.name.

Alterando nomes de campos em tabelas (como:id -> conta_id e:id -> role_id) seria uma solução alternativa, mas esse não é o meu caso - preciso ter uma chave primária nomeada id para cada mesa.

[editar] Sim, então a pergunta é simples:como resolver esse problema?

Foi útil?

Solução

Você pode usar 'select' como faria em uma consulta SQL normal:

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

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

Outras dicas

Complementando a resposta dada por @faia, você pode usar alias dentro de sua cláusula select, dessa forma você pode buscar apenas as chaves específicas necessárias, por exemplo.

Account::with('role')
    ->select('account.id AS account_id', 'role.id AS role_id', 'account.name AS account_name', 'role.name AS role_name')
    ->leftJoin('group', 'group.id', '=', 'account.group_id')
    ->get();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top