Laravel Couramment Requêtes - Comment puis-je effectuer un "SÉLECTIONNER COMME" à l'aide de Fluent?
Je suis tout à fait nouveau pour Laravel et Couramment requêtes.
J'ai une requête pour sélectionner toutes les lignes de la location de la table et de les afficher dans un ordre aléatoire.
DB::table('hire_bikes')->order_by(\DB::raw('RAND()'))->get();
Maintenant, je veux être en mesure de faire est de mettre
concat(SUBSTRING_INDEX(description, " ",25),"...") AS description
dans la partie SELECT de la requête, de sorte que je peux sélectionnez * à partir de la table et une réduction de la description.
Je sais que c'est possible par l'exécution d'une crue de la requête, mais j'espérais être capable de faire cela à l'aide de Fluent ou au moins partielle à l'aise (comme ci-dessus).
De l'aide ou des idées?
Merci
Adam.
- Le Brut équivalent de ce que im après est
DB::query('SELECT title, url, image, concat(SUBSTRING_INDEX(description, " ",25),"...") AS description, category FROM hire_bikes ORDER BY RAND()');
- Vous pouvez modifier à votre question. 😉 D'ailleurs, en général, vous faire une telle logique dans le modèle, sinon vous perdez le bénéfice de l'aide de fluent (en cours de SGBD-agnostique) et vous pouvez aller pour le raw de la requête, en premier lieu, de gagner du temps.
- Son une requête je n'ai besoin que de courir sur une seule page, donc pas besoin pour cela d'être dans un modèle, il n'a pas de jointures ou les dépendances etc... je sais que sa fait facilement via une crue de la requête et tout aussi rapide, j'espérais juste en apprendre plus sur les méthodes Couramment et de voir si il était possible de sélectionner plusieurs colonnes sans les sélectionner tous. Couramment ne s'affiche pour vous permettre d'avoir 1 colonne OU toutes les colonnes, ce qui est une honte!
- Bien sûr, vous pouvez sélectionner les colonnes
->get(array('id', 'email as user_email'));
, cependant, votre question semble être sur l'utilisation de fonctions (qui peut être spécifique de SGBD) dans votre requête, qui est quelque chose de complètement différent.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire par l'ajout d'un
DB::raw()
à une sélection de tableau dans votre couramment requête. J'ai testé en local et ça fonctionne très bien.Vous pouvez réellement utiliser sélectionnez
AS
sans l'aide deDB::raw()
. Il suffit de passer dans un tableau dans laselect()
méthode comme suit:Testé tout à l'heure.
EDIT:
Aussi je vous suggère d'utiliser un
DB:raw()
requête pour effectuer une concat de votre champ de description. Si vous utilisez un éloquent modèle que vous pouvez utiliser accesseurs & mutatators à effectuer pour vous donc, si jamais vous avez besoin d'un limitées description, vous pouvez tout simplement la sortie de votre point de vue et ne pas avoir à utiliser la même requête à chaque fois pour obtenir un limitées description. Par exemple:De votre point de vue:
Exemple de Sortie (pas précis à la limite):
EDIT #2:
Je voudrais aussi vous déconseillons d'utiliser la DB façade car elle utilise votre connexion par défaut. Si vous interrogez une connexion secondaire, de ne pas prendre cela en compte, sauf si vous spécifiez à l'aide de:
EDIT #3:
Juste pour remarque, si vous utilisez un select COMME (
name AS title
) et vous souhaitez mettre à jour votre modèle, vous aurez toujours donner le bon nom de l'attribut qui coïncide avec votre base de données de la colonne.Par exemple, cela va provoquer une exception parce que la
title
la colonne n'existe pas dans la table de base de données:Car::select('brand_name AS brand', 'colour', 'horsepower AS hp')->first();
. Vous pouvez le faire en raison de la récupération des paramètres de la fonction ($columns
) dansselect
est fait de cette façon:$this->columns = is_array($columns) ? $columns : func_get_args();
.