[laravel] whereHas 관계형 조회해서 없으면 안가져온다.

florentyoon·2022년 5월 26일
0

Laravel

목록 보기
10/12

만약 댓글들을 조회하는데 그 댓글이 달린 글이 무엇인지도 조회하려고 한다면 관계형으로 가져올수 있다.

$model = new CommentS();
$model->with('post')->get();

이렇게 하면 댓글이 어떤 글에 달렸는지 그 글의 정보도 가져온다.

하지만 글이 삭제되었다면 댓글도 볼수 없게 된다고 하자.
이럴때 저 코드를 실행하면 댓글은 살아있으므로 글을 계속 가져오게 된다.
그렇다고 아래처럼 작성한다면...

$model = new CommentS();
$model->with(['post' => function($q){
				$q->whereNull('deleted_at')
            }])->get();

댓글은 가져오지만 글은 삭제된채 null로 보여질것이다.

즉 글이 삭제되었다면 그 댓글도 존재하지 않는 리스트가 필요하다.

이렇게 관계형의 조건에 따라 해당 데이터를 가져오게 하는 것. 이럴때 whereHas를 사용한다.

whereHas

라라벨 관계형

사실 whereHas는 기존의 Has에서 조건을 더 추가로 붙일수 있는 함수다.

따라서 Has는 존재여부를 파악한다면, 그 존재 조건을 whereHas로 더 구체화하는 것이다.

$model = new CommentS();
$model->whereHas(['post' => function($q){
				$q->whereNull('deleted_at')
            }])->get();

이렇게 작성하면 whereHas가 존재하지 않는 상태라면 댓글도 더이상 보이지 않게 된다.

profile
florentyoon의 IT 세상

0개의 댓글