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 à ce SQL:
really_long_table_name AS short_name
Cela serait particulièrement utile lorsque je dois taper beaucoup de sélections et où (ou généralement, j'inclus l'alias dans l'alias de colonne de la sélection, et il est utilisé dans le tableau de résultats). Sans alias de table, il y a beaucoup plus de dactylographie pour moi et tout devient beaucoup moins lisible. Vous ne trouvez pas la réponse dans les documents laravel, des idées?
Laravel prend en charge les alias sur les tables et les colonnes avec AS
. Essayer
$users = DB::table('really_long_table_name AS t')
->select('t.id AS uid')
->get();
Voyons cela en action avec un formidable outil tinker
$ php artisan bricoleur [1] > Schema :: create ('nom_table_longue_ vraiment', fonction ($ table) {$ table-> incrémente ('id');}); // NULL [2] > DB :: table ('nom_table_longue_ vraiment') -> insert (['id' => null]); // true [3] > DB :: table ('nom_table_longue_longueur_de_table AS') -> select ('id.id AS uid') -> get (); // array ( // 0 => objet (stdClass) ( // 'uid' => '1' //) //)
Pour utiliser des alias sur des modèles éloquents, modifiez votre code comme suit:
Item
::from( 'items as items_alias' )
->join( 'attachments as att', DB::raw( 'att.item_id' ), '=', DB::raw( 'items_alias.id' ) )
->select( DB::raw( 'items_alias.*' ) )
->get();
Cela ajoutera automatiquement le préfixe de table aux noms de table et retournera une instance de modèle Items
. pas un simple résultat de requête . Ajouter DB::raw
empêche laravel d'ajouter des préfixes de table aux alias.
Voici comment on peut le faire. Je vais donner un exemple avec rejoindre pour que cela devienne super clair pour quelqu'un.
$products = DB::table('products AS pr')
->leftJoin('product_families AS pf', 'pf.id', '=', 'pr.product_family_id')
->select('pr.id as id', 'pf.name as family_name', 'pf.id as family')
->orderBy('pr.id', 'desc')
->get();
J'espère que cela t'aides.
Vous pouvez utiliser moins de code en écrivant ceci:
$users = DB::table('really_long_table_name')
->get(array('really_long_table_name.field_very_long_name as short_name'));
Et bien sûr, si vous voulez sélectionner plus de champs, écrivez simplement un "," et ajoutez plus:
$users = DB::table('really_long_table_name')
->get(array('really_long_table_name.field_very_long_name as short_name', 'really_long_table_name.another_field as other', 'and_another'));
Ceci est très pratique lorsque vous utilisez une requête complexe de jointure
Identique à la réponse AMIB, pour l’erreur de suppression logicielle "Colonne inconnue 'table_alias.deleted_at'", Ajoutez simplement ->withTrashed()
puis manipulez-la comme ->whereRaw('items_alias.deleted_at IS NULL')