Laravel 5.2 WhereNotIn查询

时间:2016-06-24 01:54:29

标签: php mysql laravel eloquent

所以我有这个非常大的搜索查询,我也试图从搜索中删除阻止用户搜索的所有用户。

我变得非常困惑并转过身来,并希望得到任何帮助。

blocked_users表包含

id
user_id
blocked_user_id

当用户阻止另一个用户时,会创建一行。现在到目前为止,我注意到用户是否没有阻止任何他们没有出现在搜索中的人(我的猜测是因为连接,如果用户不存在于表中,那么他们就会出现?)< / p>

这是我的查询的简短片段

  $query = User::join('user_profiles', 'users.id', '=','user_profiles.user_id');
  $query->Join('blocked_users', 'users.id', '=', 'blocked_users.user_id');
  $query->whereNotIn('blocked_users.blocked_user_id',[Auth::user()->id])->select('users.*','user_profiles.*');

修改

好的,如果我的用户ID为1,用户2不希望我再联系他们,或者甚至出现在我的搜索中,他们会阻止我在表格中添加一行

int,user_id = 2,blocked_user_id = 1

如果我进行搜索,我不希望用户2出现在用户1搜索中。

然而,使用leftJoin如果我的用户ID在blocked_user_id的任何行中,则无论用户是否阻止我,都没有用户显示。

我不确定我怎么能提供视觉数据。整个查询非常庞大,运行完美。我只是不确定如何结合where子句。

1 个答案:

答案 0 :(得分:1)

这可能会这样做:

$query = User::join('user_profiles', 'users.id', '=','user_profiles.user_id');
      $query->leftJoin('blocked_users', function ($sub_query) {
      $sub_query->on('users.id', '=', 'blocked_users.user_id');
      $sub_query->where('blocked_users.blocked_user_id', '=',  Auth::user()->id);
  });
  $query->where('users.id', '!=', Auth::user()->id);
  $query->whereNull('blocked_users.id');
  $query->select('users.*','user_profiles.*');