Domanda

OK, quindi ho seguito due modelli: 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 tabelle del database: account e role

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

role
----
id
name
.

e ora la cosa è:

Ho bisogno di ordinare accounts tramite colonna role.name. Ma dopo il join (o i valori di sinistra) sono sovrascriviti da quelli dalla seconda tabella. Ecco alcuni codici:

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

Dopo che i valori per id e name non sono corretti nelle raccolte eloquenti.

Inoltre, ho bisogno del ritorno per essere modelli di tipo eloquente mentre torno indietro alla risposta in JSON, dove è importante che successivamente in JS (dopo analizzare JSON) posso fare solo account.role.name.

Modifica dei nomi dei campi nelle tabelle (come: ID -> ACCOUNT_ID, e: ID -> Role_ID) sarebbe una soluzione alternativa, ma non è il mio caso - è necessario avere la chiave primaria denominata id per ogni tabella.

[modifica] Sì, quindi la domanda è semplicemente: come risolvere quel problema?

È stato utile?

Soluzione

È possibile utilizzare 'Seleziona' come se desideri in una normale query SQL:

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

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

Altri suggerimenti

Complemendo la risposta fornita da @Beech , è possibile utilizzare l'alias all'interno della clausola di selezione, in questo modo è possibile recuperare solo i tasti specifici di cui hai bisogno E.G.

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();
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top