2016-12-22 70 views
2

在我的網站中我有用戶和項目。用戶可以創建項目。我想獲得一個擁有所有用戶的數組,其中有一個項目的用戶先去,沒有項目的用戶去。(Laravel)只檢索有關係的用戶

到目前爲止,我已經做到了這一點:

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

這是非常低效的,我敢肯定有一個更好的方法來做到這一點。

回答

1

您可以在關係

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

與語法,你告訴laravel獲取有一個項目,並渴望負荷項目的所有用戶的存在,查詢;

編輯: 閱讀它看起來並不像你真正想要的項目只是在這種情況下,你需要的是

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

沒有看到的Items關係到Users我不知道這是否會工作,但你可以嘗試以下方法:

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

或者,它可能會與剛工作:

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

更新

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

用戶不具有item.id列。用戶有很多項目,項目有一個用戶。 Item有user.id列。 – DanielPahor

+0

我更新了我的答案 –

0

一個項目的用戶後,你可以嘗試

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

的foreach($用戶爲$用戶){

echo $User->item->name; 

}

0

您可以使用has()讓用戶用的物品和doesntHave()讓用戶無需項:

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

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

然後merge()兩個系列:

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

你說你想要一個數組,這樣你就可以結果轉換成數組toArray()

$array = $users->toArray();