所以我有这个非常大的搜索查询,我也试图从搜索中删除阻止用户搜索的所有用户。
我变得非常困惑并转过身来,并希望得到任何帮助。
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子句。
答案 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.*');