2016-12-22 2 views
2

In meiner Website habe ich Benutzer und Elemente. Benutzer können Elemente erstellen. Ich möchte ein Array erhalten, das alle Benutzer enthält, wobei die Benutzer, die einen Artikel haben, zuerst gehen und die Benutzer, die keinen Artikel haben, danach suchen.(Laravel) nur Benutzer abrufen, die eine Beziehung haben

Bisher habe ich dies getan:

$users = User::all(); 
foreach($users as $user) { 
    if ($user->item) { 
     $sortedUsers + $user; 
    } 
// now loop again and add users without relationship 

Diese ziemlich ineffizient ist, und ich bin sicher, es ist ein viel besserer Weg, es zu tun.

Antwort

1

Sie können auf die Existenz einer Beziehung

$users = User::has('items')->with('items')->get(); 

mit dieser Syntax abfragen Sie Laravel sagen alle Benutzer zu holen, die die Elemente einen Punkt und zu eifrig Last haben;

Edit: Nach der Lektüre es nicht so aussehen wie Sie tatsächlich die Elemente nur die Benutzer möchten, die einen Artikel haben, in diesem Fall alles, was Sie brauchen, ist

$users = User::has('items')->get(); 
0

Ohne die Beziehung von Items-Users zu sehen bin ich nicht sicher, ob dies funktionieren wird, aber Sie können versuchen, die folgenden:

$users = Users::select('users.*')->orderBy('items.id')->with('items')->get(); 

Oder es könnte mit nur Arbeit:

$users = Users::orderBy('items.id')->with('items')->get(); 

Aktualisieren

$users = Users::orderBy('items.id')->join('items', 'items.user_id', '=', 'users.id')->get(); 
+0

der Benutzer keine item.id Spalte hat umwandeln kann. Benutzer hat viele Gegenstände, Gegenstand hat einen Benutzer. Der Eintrag hat jedoch eine user.id-Spalte. – DanielPahor

+0

Ich aktualisierte meine Antwort –

0

können Sie versuchen,

$ users = Benutzer :: mit ('item') -> get();

foreach ($ Benutzer als $ user) {

echo $User->item->name; 

}

0

Sie has() Benutzer verwenden können mit Einzelteile zu erhalten und doesntHave() erhalten Anwender ohne Artikel:

$withItems = User::has('items')->get(); 

$withoutItems = User::doesntHave('items')->get(); 

Und dann merge() zwei Sammlungen:

$users = $withItems->merge($withoutItems); 

Sie sagten, Sie wollen ein Array, so dass Sie Ergebnis in ein Array mit toArray()

$array = $users->toArray(); 
Verwandte Themen