Question

Ok, j'ai donc les deux modèles suivants : Account et Role

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

  /* [...] */

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

et

class Role extends Eloquent {

  protected $table = 'role';

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

}

et les tables de la base de données : account et role

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

role
----
id
name

Et maintenant le truc c'est :

je dois commander accounts par role.name colonne.Mais après la jointure (ou leftJoin), les valeurs sont remplacées par celles de la deuxième table.Voici un peu de code :

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

Après cela, les valeurs pour id et name sont incorrects dans les collections éloquentes.

De plus, j'ai besoin que le retour soit des modèles de type éloquents car je renvoie la réponse en JSON, où il est important que plus tard dans JS (après avoir analysé JSON), je puisse le faire simplement account.role.name.

Changer les noms des champs dans les tableaux (comme :id -> account_id, et :id -> role_id) serait une solution de contournement, mais ce n'est pas mon cas - il faut que la clé primaire soit nommée id pour chaque table.

modifier] oui, donc la question est simplement:comment résoudre ce problème ?

Était-ce utile?

La solution

Vous pouvez utiliser « select » comme vous le feriez dans une requête SQL normale :

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

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

Autres conseils

Complétant la réponse donnée par @hêtre, vous pouvez utiliser un alias dans votre clause select, de cette façon vous pouvez récupérer uniquement les clés spécifiques dont vous avez besoin, par exemple.

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top