2016-07-07 11 views
0

Sagen wir, ich habe einen Blogeintrag mit einem Kommentarabschnitt. Mit Laravel Eloquent erhalte ich Daten aus der Tabelle "Kommentare" und der relationalen Tabelle "Benutzer". Etwas wie folgt aus:Laravel Eloquent - Definieren Sie die Beziehung zu einer von drei möglichen Tabellen basierend auf dem Wert der Spalte in der Elterntabelle

Comment::where('post_id', $post_id) 
     ->with('user') 
     ->get(); 

Die ‚Benutzer‘ Tabelle hat eine Spalte ‚user_type‘ mit dem Wert ‚Benutzer‘ oder ‚admin‘ genannt.

Wenn die user_type in der users Tabelle user I relationale Daten aus dem regular_users Tabelle wie folgt erhalten möchten: ->with(user.regular_user).

Wenn die user_type in der users Tabelle admin I relationale Daten aus dem admins Tabelle wie folgt erhalten möchten: ->with('user.admin')

(. Richtig Alle Beziehungen sind definiert in den Modellen)

Wie kann ich mach das?

+0

Sie einen Blick in MySQL erstellen – CSK

+0

Warum beide nicht nur eifrig Last, unabhängig von der Art? 'mit ('user', 'user.regular_user', 'user.admin')' – patricus

Antwort

0

Statt mit, versuchen Sie Folgendes mit whereHas:

d.h .:

$regular_users = Comment::where('post_id', $post_id) 
    ->whereHas('user',function ($user) { 
     $user->where('user_type', 'user')->with('regular_user'); 
    })  
->get(); 
+0

N + 1 Problem! Es ist ein Performance-Killer-Problem;) Ich empfehle dringend, die Antwort zu entfernen! –

+0

Ja, du hast Recht. Nicht das beste um solche Anfragen zu machen. Die eloquente WhereHad-Funktion könnte hier mehr Sinn ergeben. –

+0

Ich bearbeite meine Antwort. :) –