获取不属于该组成员的用户的逻辑

时间:2013-12-30 12:52:33

标签: php mysql laravel

获取不属于所选组的用户列表背后的逻辑是什么 或者获取不在我的联系人列表中的用户列表

使用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);

但这是最有效的方式吗?

2 个答案:

答案 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);