获取不属于所选组的用户列表背后的逻辑是什么 或者获取不在我的联系人列表中的用户列表。
使用laravel我想出了一个代码。
代码:
// I get all the uid of the members of the user group.
$members_list = GroupMembers::where('group_id', $group_id)->lists('uid');
// I compare it to the list of all users and get those that are not in the list
$nonMembers = Users:whereNotIn('uid', $members_list)->paginate(10);
但这是最有效的方式吗?
答案 0 :(得分:0)
绝对不是那么好.. 假设关系是
群组成员 - >有多个>用户
你可以使用连接
DB ::表( 'group_members') - >加入( '用户', 'group_members.uid', '<>', 'users.uid')
答案 1 :(得分:0)
我不确定它真的太重要了,因为它们都是非常简单的查询所以它们不应该花太长时间。如果您真的关心性能,可能需要进行一些实验来确定哪种方式最快。
以下是使用查询构建器和表连接执行此操作的方法。这将使用一个查询,但由于它正在加入,它可能需要的时间与使用已有的时间差不多。另请注意,这不允许您像往常一样遍历集合($ user-> group-> name例如只会变成$ user-> name,如果您的用户有一个名称列,那么表,某些东西可能会被覆盖)
$users = DB::table('group_members')
->join('users','users.uid','=','group_members.uid')
->where('group_members.group_id', '<>', $group_id)
->paginate(10);
你正在做的事情几乎就是渴望加载正在做什么,除非你是手工完成。这样做的正确方法如下,可能是您最好的解决方案,但它可能无法为您节省任何性能。
$users = User::with(array('groupMembers' => function($query) use ($group_id)
{
$query->where('group_id', '<>', $group_id);
}))->paginate(10);