2017-03-11 2 views
1

Auswahl Gibt es einen Grund, warum meine Frage nicht endet ?, Ich versuche, die alle Werte aus der sekundären Tabelle zu erhalten in einem in beredten kommen:alle Felder aus Sekundärtabelle in beredten

Product::leftJoin('brands', 'products.brand_id', '=', 'brands.id') 
        ->leftJoin('product_categories', function($query) use ($parent){ 
         $query->on('products.category_id', '=', 'product_categories.id') 
          ->where('product_categories.parent_id', $parent); 
        }) 
        ->selectRaw('brands.*') 
        ->groupBy('brands.id') 
        ->get(); 

Wenn ich Wählen Sie Produkte. * Die Abfrage geht gut, aber mit Marken. * Es endet nie, weiß jemand, was passiert ist?

Wenn ich den SQL direkt in phpmyadmin ausführen, gibt es mir das Ergebnis.

Was ich mit dieser Abfrage muß, ist alle Marken mit bestehenden Produkten zu erhalten, die seine Kategorie hat parent_id = $ parent

+0

würde ich empfehlen Beziehungen in beredten anstelle von SQL verwenden, so dass Sie so etwas wie 'Produkt :: Marken haben würden() -> mit ("product_categories") statt. [Lesen Sie die Dokumente zu Beziehungen] (https://laravel.com/docs/5.4/eloquent-relationships). –

+0

Danke für Ihre Antwort Thomas, aber was ich brauche mit dieser Abfrage ist, ** alle Marken mit bestehenden Produkten, dass seine Kategorie parent_id = $ parent **, glauben Sie, dass ich das mit Beziehungen tun kann? –

+0

Vielleicht möchten Sie über die Beziehung [hat viele durch] (https://laravel.com/docs/5.4/eloquent-relationships#has-many-through) lesen. Es wird ein paar Lektüre dauern, um es zu verstehen, aber es hört sich an, als würde es tun, was Sie tun müssen. Erwägen Sie auch, Ihre Daten um Eloquent zu strukturieren, es wird Ihr Leben viel einfacher machen - und vielleicht die Datenbank mehr normalisieren. –

Antwort

0

Nun, ich weiß nicht, warum eloquent ein Problem mit dem Erhalten Sie die Felder aus der zweiten Tabelle hat, aber ich habe Query Builder verwendet, damit diese Abfrage funktioniert. Ich lasse meine „Lösung“, vielleicht ist es sinnvoll, jemand:

$brands = Product::leftJoin('brands', 'products.brand_id', '=', 'brands.id') 
        ->leftJoin('product_categories', function($query) use ($parent){ 
         $query->on('products.category_id', '=', 'product_categories.id') 
          ->where('product_categories.parent_id', $parent); 
        }) 
        ->selectRaw('brands.*') 
        ->groupBy('brands.id'); 
     $bindings = $brands->getBindings(); 
     $sql = $brands->toSql(); 
     $sql = vsprintf(str_replace('?', '%s', $sql), $bindings); 
     $brands = \DB::select($sql); 
Verwandte Themen