Pregunta

Ok, tengo los siguientes dos modelos: Account y Role

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

  /* [...] */

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

y

class Role extends Eloquent {

  protected $table = 'role';

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

}

y tablas de bases de datos: account y role

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

role
----
id
name

Y ahora la cosa es:

necesito hacer un pedido accounts por role.name columna.Pero después de unirse (o leftJoin), los valores de la segunda tabla anulan los valores.Aquí hay un código:

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

Después de eso los valores para id y name son incorrectos en colecciones elocuentes.

Además, necesito que la devolución sea modelos de tipo elocuente ya que estoy devolviendo la respuesta en JSON, donde es importante que más adelante en JS (después de analizar JSON) pueda hacer simplemente account.role.name.

Cambiar nombres de campos en tablas (como:id -> id_cuenta, y:id -> role_id) sería una solución alternativa, pero ese no es mi caso: necesito tener una clave principal nombrada id para cada mesa.

editar] sí, entonces la pregunta es simplemente:¿Cómo solucionar ese problema?

¿Fue útil?

Solución

Puede utilizar 'seleccionar' como lo haría en una consulta SQL normal:

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

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

Otros consejos

Complementando la respuesta dada por @haya, puede usar alias dentro de su cláusula de selección, de esa manera puede recuperar solo las claves específicas que necesita, p.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top