Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (Laravel)仅检索具有关系的用户_Php_Laravel_Laravel 5_Eloquent_Laravel 5.3 - Fatal编程技术网

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();