그래서 저는이 매우 큰 검색 쿼리를 가지고 있으며 사용자 검색을 차단 한 사용자를 검색에서 제거하려고합니다.
나는 정말 혼란스럽고 돌아 서서 어떤 도움을 원합니다.
block_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가 더 이상 연락하지 않거나 검색에 표시되기를 원하지 않으면 테이블에 행을 추가하는 나를 차단합니다.
정수, 사용자 _ID = 2, 차단 _ 사용자 _ID = 1
검색을하면 사용자 2가 사용자 1의 검색에 표시되는 것을 원하지 않습니다.
그러나 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] 삭제
몇 마디 만하겠습니다