만약 댓글들을 조회하는데 그 댓글이 달린 글이 무엇인지도 조회하려고 한다면 관계형으로 가져올수 있다.
$model = new CommentS();
$model->with('post')->get();
이렇게 하면 댓글이 어떤 글에 달렸는지 그 글의 정보도 가져온다.
하지만 글이 삭제되었다면 댓글도 볼수 없게 된다고 하자.
이럴때 저 코드를 실행하면 댓글은 살아있으므로 글을 계속 가져오게 된다.
그렇다고 아래처럼 작성한다면...
$model = new CommentS();
$model->with(['post' => function($q){
$q->whereNull('deleted_at')
}])->get();
댓글은 가져오지만 글은 삭제된채 null로 보여질것이다.
즉 글이 삭제되었다면 그 댓글도 존재하지 않는 리스트가 필요하다.
이렇게 관계형의 조건에 따라 해당 데이터를 가져오게 하는 것. 이럴때 whereHas를 사용한다.
사실 whereHas는 기존의 Has에서 조건을 더 추가로 붙일수 있는 함수다.
따라서 Has는 존재여부를 파악한다면, 그 존재 조건을 whereHas로 더 구체화하는 것이다.
$model = new CommentS();
$model->whereHas(['post' => function($q){
$q->whereNull('deleted_at')
}])->get();
이렇게 작성하면 whereHas가 존재하지 않는 상태라면 댓글도 더이상 보이지 않게 된다.