2014-06-27 8 views
5

Ich habe eine Frage bezüglich Join-Klauseln in Eloquent, und ob Sie auf einen Zeichenfolgewert statt einer Tabellenspalte beitreten können.Eloquent - Join-Klausel mit Zeichenfolge Wert und keine Spaltenüberschrift

Ich habe den folgenden Code Abfrage eines verschachtelten Sets verbinden Eltern/Kind Datensätze in einer Tabelle "Destinationen" über eine Tabelle "Taxonomie".

Die zweite $join Anweisung in der Schließung ist derjenige, der ein Problem verursacht; Eloquent nimmt an, dass dies eine Spalte ist, wenn ich eigentlich nur auf t1.parent_type = 'Destination' beitreten möchte - also t1.parent_type sollte = ein String-Wert, Destination.

$result = DB::connection() 
    ->table('destinations AS d1') 
    ->select(array('d1.title AS level1', 'd2.title AS level2')) 
    ->leftJoin('taxonomy AS t1', function($join) { 
     $join->on('t1.parent_id', '=', 'd1.id'); 
     $join->on('t1.parent_type', '=', 'Destination'); 
    }) 
    ->leftJoin('destinations AS d2', 'd2.id', '=', 't1.child_id') 
    ->where('d1.slug', '=', $slug) 
    ->get(); 

Ist es möglich, Eloquent zu zwingen, dies zu tun? Ich habe versucht, 'Destination' durch DB::raw('Destination') zu ersetzen, aber das funktioniert auch nicht.

Vielen Dank.

+4

Um meine eigene Frage zu beantworten, ist die Lösung zu verwenden 'DB :: raw ("'Destination'") '- Ich habe die Anführungszeichen schon vorher verpasst! – benJ

+2

Beantworte deine eigene Frage dann ;-) –

Antwort

4

try DB::raw("'Destination'")

+0

Der Autor hat seine eigene Frage vor Tagen in Kommentaren beantwortet - du versendest es einfach neu! – Synchro

+1

@Synchro hmm .. Ich habe es nicht gesehen. Ich habe die Kommentare nicht überprüft. Er hätte seine eigene Frage beantworten können, anstatt sie zu kommentieren. –

+0

Ich hätte meine eigene Frage beantwortet, aber habe nicht genügend Punkte dafür;) – benJ

10

Ein weiterer beste Weg, diese zu erreichen, besteht darin:

$result = DB::connection() 
    ->table('destinations AS d1') 
    ->select(array('d1.title AS level1', 'd2.title AS level2')) 
    ->leftJoin('taxonomy AS t1', function($join) { 
     $join->on('t1.parent_id', '=', 'd1.id'); 
     $join->where('t1.parent_type', '=', 'Destination'); 
    }) 
    ->leftJoin('destinations AS d2', 'd2.id', '=', 't1.child_id') 
    ->where('d1.slug', '=', $slug) 
    ->get(); 

Ersetzen Sie Ihre on mit where

+0

Danke für 'Ersetzen Sie Ihre 'an' mit 'wo''! –

Verwandte Themen