2016-11-25 6 views

Antwort

1

Sie erhalten 50 Benutzer, weil Sie die Bedingung auf profile anwenden. dd($user->profile) erhalten Sie nur die Datensätze des Profils, deren Status wahr ist.

Verwendung whereHas():

$users = User::whereHas('profile', function ($query) { 
     $query->where('status', TRUE); 
    })->get(); 

dd(count($users)); 
+0

habe den Punkt, danke –

+0

Aber es gibt ein Problem. Arise N + 1 Abfrageproblem. –

0

Wenn Sie es arbeiten mit einzelnen Abfrage machen möchten, können Sie Query Builder join wie

\DB::table('users')->join('profile', function ($join){ 
         $join->on('users.id', '=', 'profile.user_id')->where('profile.status', '=',TRUE); 
        })->get(); 
+0

Danke, endlich verschiebe ich die Statusspalte in die users-Tabelle und benutze Model ORM query und es funktioniert. –

0

können Sie sagten, Sie N + 1 Problem haben sollten, also müssen Sie sowohl whereHas() als auch with() so verwenden, um Benutzer mit Profilen zu erhalten und N + 1 Problem zu lösen:

$users = User::whereHas('profile', function ($query) { 
     $query->where('status', TRUE); 
    }) 
    ->with('profile') 
    ->get(); 
Verwandte Themen