Laravel 5.2 WhereNotIn查询

迈克尔·汉德

因此,我有一个非常大的搜索查询,并且我也试图从搜索中删除阻止用户搜索的所有用户。

我真的很困惑,转过身,很乐意提供任何帮助。

blocked_users表包含

id
user_id
blocked_user_id

当一个用户阻止另一个用户时,将创建一行。现在,到目前为止,我注意到用户是否没有阻止任何根本没有出现在搜索中的用户(由于连接,我的猜测是,如果该用户不存在于表中,则他们会出现在显示中?)。

这是我的查询的一小段

  $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出现在用户1s的搜索中。

但是,使用leftJoin时,无论谁阻止了我,如果我的用户ID位于blocked_user_id的任何行中,都不会显示任何用户。

我不确定我还能如何提供可视数据。整个查询非常庞大,并且效果很好。我只是不确定如何结合where子句。

马特克罗

这可以做到:

$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.*');

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章