因此,我有一个非常大的搜索查询,并且我也试图从搜索中删除阻止用户搜索的所有用户。
我真的很困惑,转过身,很乐意提供任何帮助。
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] 删除。
我来说两句