(Laravel) 只检索有关系的用户
(Laravel) only retrieving users that have a relationship
在我的站点中,我有用户和项目。用户可以创建项目。我想得到一个包含所有用户的数组,其中有物品的用户在前,没有物品的用户在后。
到目前为止我已经这样做了:
$users = User::all();
foreach($users as $user) {
if ($user->item) {
$sortedUsers + $user;
}
// now loop again and add users without relationship
这是非常低效的,我相信有更好的方法来做到这一点。
没有看到 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();
可以查询是否存在关系
$users = User::has('items')->with('items')->get();
使用该语法,您告诉 laravel 获取所有拥有某个项目的用户并预先加载这些项目;
编辑:
阅读后,您似乎并不真正想要这些物品,只是拥有物品的用户,在这种情况下,您只需要
$users = User::has('items')->get();
你可以试试
$users = User::with('item')->get();
foreach ($users as $user) {
echo $User->item->name;
}
您可以使用 has()
to get users with items and doesntHave()
获取没有商品的用户:
$withItems = User::has('items')->get();
$withoutItems = User::doesntHave('items')->get();
然后merge()
两个集合:
$users = $withItems->merge($withoutItems);
你说你想要一个数组,所以你可以用 toArray()
将结果转换成数组
$array = $users->toArray();
在我的站点中,我有用户和项目。用户可以创建项目。我想得到一个包含所有用户的数组,其中有物品的用户在前,没有物品的用户在后。
到目前为止我已经这样做了:
$users = User::all();
foreach($users as $user) {
if ($user->item) {
$sortedUsers + $user;
}
// now loop again and add users without relationship
这是非常低效的,我相信有更好的方法来做到这一点。
没有看到 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();
可以查询是否存在关系
$users = User::has('items')->with('items')->get();
使用该语法,您告诉 laravel 获取所有拥有某个项目的用户并预先加载这些项目;
编辑: 阅读后,您似乎并不真正想要这些物品,只是拥有物品的用户,在这种情况下,您只需要
$users = User::has('items')->get();
你可以试试
$users = User::with('item')->get();
foreach ($users as $user) {
echo $User->item->name;
}
您可以使用 has()
to get users with items and doesntHave()
获取没有商品的用户:
$withItems = User::has('items')->get();
$withoutItems = User::doesntHave('items')->get();
然后merge()
两个集合:
$users = $withItems->merge($withoutItems);
你说你想要一个数组,所以你可以用 toArray()
$array = $users->toArray();