CONCAT colonnes avec Laravel 5 éloquent
Me considèrent comme laravel débutant
L'objectif est: j'ai deux colonnes, maintenant j'ai besoin de la id
être préfixé avec le component name
de la même ligne dans la table.
Par Exemple (de Travail)... j'ai Mysql comme
SELECT CONCAT(components.name," ", components.id) AS ID
FROM `components`
Et de sortie est
ID
|TestComp 40 |
-------------
|component 41 |
-------------
|test 42 |
J'ai besoin de la même chose dans laravel éloquent, comme ici Composante est le nom du Modèle. J'ai donc essayé quelque chose comme
$comp=Component::select("CONCAT('name','id') AS ID")->get()
mais ça ne fonctionne pas.
Je pense que parce que la syntaxe est incorrecte.
De bien vouloir m'aider avec la syntaxe correcte. À l'aide de laravel
Models
.
Note: j'ai fait la requête ci-dessus, en se référant à ce qu'qui sont disponibles sur internet.
User::select(DB::raw('CONCAT(last_name, first_name) AS full_name'))
Je ne suis pas familier avec Éloquent, mais mon expérience avec des frameworks ORM, vous n'avez pas besoin de faire cela, parce que vous pouvez faire quelque chose comme ceci:
$entity = $model->getById(1);echo $entity->getLastName().$entity->getFirstName();
Il peut ressembler à de la surcharge, ORM cadres est toujours frais généraux.OriginalL'auteur Eliyaz L | 2017-03-11
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'envelopper votre requête dans
DB::raw
:Aussi, remarque parce que vous faites de votre requête comme ceci, votre modèle peut comporter différemment, parce que c'sélectionnez supprime tous les autres champs de l'instruction select.
Si vous ne pouvez pas lire les autres domaines de votre modèle, sans une nouvelle requête. Si SEULEMENT l'utiliser pour la LECTURE des données et de ne pas MODIFIER les données.
Aussi, de faire d'elle une belle liste, je vous suggère de modifier votre requête à:
$comp = Component::select(DB::raw("CONCAT(nom,id) COMME display_name"),'id')->get()->arracher('display_name','id'); // sortie de vidage de voir à quoi il ressemble. dd($comp);// tableau de la clé devrait être le arrray de l'indice, la valeur de la concatted valeur. Cela fonctionne pour moi avec modifier
OriginalL'auteur Tschallacka
Je suis venu sur ce post pour les réponses moi-même. Le seul problème pour moi est que la réponse n'a pas vraiment de ma situation. J'ai de nombreuses relations de table de configuration et j'ai besoin de l'enfant objets ont un champ concaténé. Le
DB::raw
solution a été trop brouillon pour moi. J'ai continué à chercher et a trouvé la réponse dont j'avais besoin et me sentir une solution plus facile.Au lieu de
DB::raw
, je suggère d'essayer une Éloquent Accesseur. Accesseurs permettent de récupérer les attributs de modèle ET d'en créer de nouveaux qui ne sont pas créées par le modèle original.Par exemple, disons que j'ai une base USER_PROFILE table. Il contient
id, first_name, last_name
. J'ai le besoin de CONCAT les deux attributs de nom pour le retour de leur nom complet de l'utilisateur. Dans le USER_PROFILE Modèle que j'ai crééphp artisan make:model UserProfile
, je mets en place les éléments suivants:À partir d'ici, quand je fais quelque éloquent appels, j'ai maintenant accès à cet attribut supplémentaire accesseur.
Je dirai que je n'ai couru dans un problème. Qui essaie de créer un attribut modifié avec le même nom, comme dans votre exemple (id, ID). Je peux modifier la valeur de l'id lui-même, mais parce que j'ai déclaré le même nom, il apparaît pour n'autoriser l'accès à la valeur du champ et aucun autre domaine.
D'autres l'ont dit, ils peuvent le faire, mais j'ai été incapable de résoudre ces questions, quel est le problème EXACT.
OriginalL'auteur Bmoeller