Disons que nous utilisons le générateur de requêtes de Laravel:
$users = DB::table('really_long_table_name')
->select('really_long_table_name.id')
->get();
Je recherche 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 de localisations (ou généralement, j'inclus également l'alias dans l'alias de colonne de la sélection, et il est utilisé dans le tableau de résultats). Sans aucun alias de table, il y a beaucoup plus de frappe pour moi et tout devient beaucoup moins lisible. Vous ne trouvez pas la réponse dans les documents laravel, des idées?
protected $table = "books";
), alors comment puis-je créer un alias? (par exemple généré SQL:... FROM books AS A ...
)protected $table = 'really_long_table_name AS short_name';
mais cela échouerait sur les INSERTs. Peut également interrompre les requêtes de relation. J'utilise Lumen et un modèle DDD / Repository pour éviter complètement Eloquent.Pour utiliser des alias sur des modèles éloquents, modifiez votre code comme ceci:
Cela ajoutera automatiquement un préfixe de table aux noms de table et retournera une instance de
Items
modèle. pas un simple résultat de requête. L'ajoutDB::raw
empêche laravel d'ajouter des préfixes de table aux alias.la source
Unknown column 'table_alias.deleted_at'
->withTrashed()
et->whereNull('table_alias.deleted_at')
Voici comment procéder. Je vais donner un exemple avec l'adhésion afin que cela devienne super clair pour quelqu'un.
J'espère que cela t'aides.
la source
À utiliser dans Eloquent. Ajoutez par-dessus votre modèle
protected $table = 'table_name as alias'
.. puis utilisez dans votre requête comme
ModelName::query()->select(alias.id, alias.name)
la source
Vous pouvez utiliser moins de code, en écrivant ceci:
Et bien sûr, si vous souhaitez sélectionner plus de champs, écrivez simplement un "," et ajoutez-en plus:
Ceci est très pratique lorsque vous utilisez une requête complexe de jointures
la source
Identique à la réponse AMIB, pour l'erreur de suppression logicielle "Colonne inconnue 'table_alias.deleted_at'", ajoutez simplement
->withTrashed()
puis gérez-la vous-même comme->whereRaw('items_alias.deleted_at IS NULL')
la source