Mysql Laravel 8如何联接两个表并检查值是否存在
我在查询两个表时遇到问题 基本上,我有一个“黑名单”表,有两列“用户id”和“块id”,其中“用户id”是当前用户,“块id”是被阻止的用户。另一个表是“用户”,其中包含注册用户的信息 在我的站点中,我有一个搜索用户的页面,我的问题是,如果id1阻止了id2,那么当id2搜索id1时,它不应该显示出来,所以在“黑名单”表中,我会有这些值用户标识=1,块列表=2 我试过很多方法,但都没有成功,你能帮我吗?请原谅我的英语Mysql Laravel 8如何联接两个表并检查值是否存在,mysql,laravel,vue.js,Mysql,Laravel,Vue.js,我在查询两个表时遇到问题 基本上,我有一个“黑名单”表,有两列“用户id”和“块id”,其中“用户id”是当前用户,“块id”是被阻止的用户。另一个表是“用户”,其中包含注册用户的信息 在我的站点中,我有一个搜索用户的页面,我的问题是,如果id1阻止了id2,那么当id2搜索id1时,它不应该显示出来,所以在“黑名单”表中,我会有这些值用户标识=1,块列表=2 我试过很多方法,但都没有成功,你能帮我吗?请原谅我的英语 public function search(Request $reque
public function search(Request $request){
$id= Auth::id();
$query = $request->query('query');
$utentis = DB::table('black_lists')
->join('users', 'users.id', '=', 'users.id')
->where('users.id', '!=', $id)
->where('users.name', 'like', '%' . $query . '%')
->where('black_lists.user_id', '!=', 'users.id')
->orWhere('users.cognome', 'like', '%' . $query . '%')
->where('black_lists.user_id', '!=', 'users.id')
->where('users.id', '!=', $id)
->orWhere('users.username', 'like', '%' . $query . '%')
->where('black_lists.user_id', '!=', 'users.id')
->where('users.id', '!=', $id)
->select('users.id', 'users.name', 'users.fotoProfilo')
->get();
if ($utentis->count() > 0) {
return response()->json($utentis);
}
}
我假设您在用户之间创建了一个多对多关系,黑名单是一个透视表
public function search(Request $request)
{
$id = $request->id;
return User::where('id', $id)
->whereDoesntHave('blocks', function($query) use ($id) {
$query->where('user_id', '!=', $id);
}),
]);
}
更新
// User.php
public function blocks()
{
return $this
->belongsToMany(User::class, 'black_list', 'block_id', 'user_id')
->using(BlackList::class)
->withTimestamps();
}
注:
谢谢你们两位的及时回复。不幸的是,它使用#gbalduzzi解决方案返回null。我试着在桌子上加一个屏幕。 变量$id=Auth::id();
当我运行查询时,只有在黑名单表中没有用户id==“阻止我的用户id”和block\u id=$id时,它才会返回用户配置文件。再次感谢您的帮助。完美效果很好,非常感谢您的帮助
public function search(Request $request)
{
$id= Auth::id();
$query = $request->query('query');
$utentis = User::where('users.id', '!=', $id)
->where(function ($filter) use ($query) {
$filter->where('users.name', 'like', '%' . $query . '%')
->orWhere('users.cognome', 'like', '%' . $query . '%')
->orWhere('users.username', 'like', '%' . $query . '%');
})
->whereDoesntHave('blocks', function ($query) use ($id) {
$query->where('black_lists.block_id','=', $id)
->where('black_lists.user_id','!=', 'users.id');
})
->select('users.id', 'users.name', 'users.fotoProfilo')
->get();
//Log::debug($utentis);
if ($utentis->count() > 0) {
return response()->json($utentis);
}
}
您好,不,我没有两个表之间的关系,表之间的关系应该是正确的方式,但我无法发展,请您为我举个例子,我将不胜感激,谢谢我更新了我的答案
join('users','users.id','=','users.id')
看起来有误。两个联接列中的一个应来自黑名单
表