2017-03-11 25 views
3

Betrachten Sie mich als Laravel AnfängerCONCAT Spalten mit Laravel 5 eloquent

Das Ziel ist: Ich habe zwei Spalten, jetzt muss ich die id mit dem component name der gleichen Zeile in der Tabelle vorangestellt werden.

Beispiel (Working) ... Ich habe Mysql wie

SELECT CONCAT(components.name," ", components.id) AS ID 
FROM `components` 

Und Ausgang ist

ID

|TestComp 40 | 
------------- 
|component 41 | 
------------- 
|test 42  | 

muss ich das gleiche in Laravel beredte Weise , wie hier Komponente ist Modellname. Also habe ich etwas wie

$comp=Component::select("CONCAT('name','id') AS ID")->get() 

versucht, aber es funktioniert nicht.
Ich denke, weil die Syntax falsch ist.
Bitte helfen Sie mir mit der richtigen Syntax. Mit laravelModels.

Hinweis: Ich habe die obige Abfrage gemacht und diese als im Internet verfügbar bezeichnet.

User::select(DB::raw('CONCAT(last_name, first_name) AS full_name')) 
+0

Ich bin nicht vertraut mit Eloquent, aber aus meiner Erfahrung mit ORM-Frameworks, brauchen Sie nicht das tun, weil Sie so etwas tun können: '$ entity = $ modell-> getById (1); echo $ entity-> getLastName(). $ entity-> getFirstName();' Es kann aussehen wie Overhead, aber ORM-Frameworks ist immer über Kopf. – degr

Antwort

8

Sie benötigen eine Abfrage in DB::raw einzuwickeln:

$comp = Component::select(DB::raw("CONCAT('name','id') AS ID"))->get() 

Beachten Sie auch, weil Sie Ihre Abfrage wie dies tun, könnte Ihr Modell anders verhalten, weil diese select alle anderen Felder aus der entfernt Wählen Sie die Anweisung aus. Sie können also die anderen Felder Ihres Modells nicht ohne eine neue Abfrage lesen. Verwenden Sie NUR dies für das Lesen von Daten und nicht das Ändern von Daten.

Auch ist es in einer netten Liste zu machen, empfehle ich Ihnen Ihre Anfrage verändern:

$comp = Component::select(DB::raw("CONCAT('name','id') AS display_name"),'id')->get()->pluck('display_name','id'); 
// dump output to see how it looks. 
dd($comp);// array key should be the arrray index, the value the concatted value. 
+0

thx. weil ich einen Drop-Down habe. Es wird die kombinierte Liste aus zwei Tabellen angezeigt. Ich habe Union Abfrage verwendet. davor habe ich vorgehabt, die einzelteile voranzustellen ... damit ich unterscheiden konnte, was von der komponenten- und produkttabelle ist. zum Beispiel, wenn der Benutzer 5 Artikel auswählt, die zum Produkt gehören, und 2 Artikel, die zur Komponententabelle gehören. dann kann ich die Einzelteile nehmen, die mit p vorangestellt sind. So erhalte ich diese 5 Einzelteile. dann kann ich dieses Präfix beim Speichern entfernen. und auch zu merken, während der Anzeige für den Benutzer wird sein Wert verborgen .. so der Benutzer nur die Elemente sehen, nicht seine Werte und auch ich speichern, indem Sie Präfix entfernen –