【问题标题】:Laravel 5.2 WhereNotIn queryLaravel 5.2 WhereNotIn 查询
【发布时间】:2016-10-26 13:10:50
【问题描述】:

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

我真的很困惑,转过身来,希望得到任何帮助。

blocked_users 表包含

id
user_id
blocked_user_id

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

这是我的查询的简短 sn-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 在 block_user_id 的任何一行中,无论是谁阻止了我,都不会显示任何用户。

我不确定我还能如何提供可视化数据。整个查询非常庞大并且运行良好。我只是不确定如何组合 where 子句。

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案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.*');
    

    【讨论】:

    • 谢谢,有点错误。 - Builder.php 第 2345 行中的 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::id()
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多