2014-11-16 24 views
15

ho un modello eloquente nome eloquente:Come alias il nome di una colonna in Eloquente

Products::where("actice", "=", true)->get()->toArray(); 

Ora voglio aggiungere join-dichiarazione ad essa, ho definito uno scopeQuery con:

public function scopeJoinWithTags($query) 
    { 
     return $query->leftJoin("tags", "tags.id", "=", "products.tag_id"); 
    } 

Poi la nostra query principali modifiche apportate:

Products::where("actice", "=", true)->joinWithTags->get()->toArray(); 

quello che ottengo è OK, è quello che mi aspetto, ma voglio cambiare il nome proprietà della tabella dei tag per tag_name, come dovrei farlo? Voglio dire, lo dico da qualche parte nella mia interrogazione a:

tags.name AS tag_name 

In modo che nella matrice risultato finale devo fare:

$result[$i]['tag_name']; 

Mentre ora devo:

$result[$i]['name']; 
+0

Eventuali duplicati [http://stackoverflow.com/questions/ 17174837/laravel-4-eloquent-column-alias] (http://stackoverflow.com/questions/17174837/laravel-4-eloquent-column-alias) – itachi

risposta

24

modo più semplice per fare questo sarebbe quello di aggiungere i campi necessari al metodo get() e alias quelli che si desidera rinominare lì.

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->get(['tags.name AS tag_name', 'products.*']) 
    ->toArray(); 
+0

Potete dirmi per favore qual è il secondo parametro? '' actice. * ''? L'ho cambiato in 'prodotti. *' E funziona. –

+2

Oops spiacente, sì, avrebbe dovuto essere prodotti. * Significa semplicemente includere tutti i campi della tabella dei prodotti. – turntwo

+0

Questo è il metodo che ho usato, ma va notato che altri framework gestiscono questo in modo nativo con array associativi. È un peccato che sia stato lasciato fuori da Laravel. – dKen

0

On laravel 5.4 (non so se versione precedente si applicano anche) si può fare che con il metodo select:

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->select('tags.name AS tag_name', 'products.*') 
    ->get(); 

Almeno per me questo è più pulita.

+0

come rinominare la tabella prodotti? –

0

V'è anche un modo più pulito per raggiungere questo

E 'possibile usufruire di mutators laravel

public function getTagNameAttribute() 
{ 
    return $this->attributes['name']; 
} 

Spero che questo aiuti

Problemi correlati