185 votes

Comment aliaser une table dans les requêtes Laravel Eloquent (ou en utilisant Query Builder) ?

Disons que nous utilisons le constructeur de requêtes de Laravel :

$users = DB::table('really_long_table_name')
           ->select('really_long_table_name.id')
           ->get();

Je cherche un équivalent de ce SQL :

really_long_table_name AS short_name

Cela serait particulièrement utile lorsque je dois saisir un grand nombre de sélections et d'emplacements (ou lorsque j'inclus l'alias dans l'alias de colonne de la sélection et qu'il est utilisé dans le tableau de résultats). Sans alias de table, je dois taper beaucoup plus de choses et tout devient beaucoup moins lisible. Je ne trouve pas la réponse dans la documentation de Laravel, une idée ?

1voto

J'ai essayé toutes ces options et aucune ne fonctionne pour moi. J'ai alors trouvé quelque chose dans la documentation de Laravel qui fonctionne vraiment.

Vous pouvez essayer ceci :

DB::table('table_one as t1')
    ->select(
        't1.field_id as id','t2.field_on_t2 as field'
     )->join('table_two as t2', function ($join) {
        $join->on('t1.field_id ', '=', 't2.field_id');
    })->get()

1voto

theDude Points 86

Notez également que vous pouvez passer un alias comme deuxième paramètre de la méthode table lorsque vous utilisez la façade DB :

$users = DB::table('really_long_table_name', 'short_name')
           ->select('short_name.id')
           ->get();

Je ne sais pas si cette fonctionnalité est apparue avec une version spécifique de Laravel ou si elle a toujours été intégrée.

0voto

Ahmed Gamal Points 66

Identique à la réponse d'AMIB, pour l'erreur de suppression douce "Unknown column 'table_alias.deleted_at'", il suffit d'ajouter ->withTrashed() alors traitez-le vous-même comme ->whereRaw('items_alias.deleted_at IS NULL')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X