Php (Laravel)仅检索具有关系的用户
在我的站点中,我有用户和项目。用户可以创建项目。我想得到一个包含所有用户的数组,其中有项目的用户优先,没有项目的用户优先 到目前为止,我已经做到了:Php (Laravel)仅检索具有关系的用户,php,laravel,laravel-5,eloquent,laravel-5.3,Php,Laravel,Laravel 5,Eloquent,Laravel 5.3,在我的站点中,我有用户和项目。用户可以创建项目。我想得到一个包含所有用户的数组,其中有项目的用户优先,没有项目的用户优先 到目前为止,我已经做到了: $users = User::all(); foreach($users as $user) { if ($user->item) { $sortedUsers + $user; } // now loop again and add users without relationship 这是相当低效的,我相
$users = User::all();
foreach($users as $user) {
if ($user->item) {
$sortedUsers + $user;
}
// now loop again and add users without relationship
这是相当低效的,我相信有一个更好的方法来做到这一点 没有看到
项目
与用户的关系
我不确定这是否有效,但您可以尝试以下方法:
$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();
您可以查询是否存在关系
$users = User::has('items')->with('items')->get();
使用这种语法,您告诉laravel获取所有拥有项目的用户,并急切地加载项目
编辑:
在阅读之后,看起来你并不是真的想要这些项目,只是想要那些有项目的用户。在这种情况下,你所需要的只是
$users = User::has('items')->get();
你可以试试
$users=User::with('item')->get()
foreach($users作为$user){
}
您可以使用获取包含项目的用户和获取不包含项目的用户:
$withItems = User::has('items')->get();
$withoutItems = User::doesntHave('items')->get();
然后是两个系列:
$users = $withItems->merge($withoutItems);
您说过您想要一个数组,所以您可以将结果转换为具有
用户没有item.id列。用户有许多项,项有一个用户。但项具有user.id列。
$users = $withItems->merge($withoutItems);
$array = $users->toArray();