ms_dizzy_ whereHas mecbur kullanacaksınız çünkü başka bir tablo ile ilişki kurup şart koymak istiyorsunuz. with ise ilişkileri de ayrıca collection'a dahil etmenizi sağlar, onların sorgusu bağımsız. İsterseniz whereHas yanında with de kullanabilirsiniz (sonuçta ikisi farklı iş yapıyor) ama dediğim gibi ötekilerin sorgusu bağımsız olduğu için ana sorgunuz whereHas ile sınırlandırılmış olsa bile with tüm ilişkiyi yükler, whereHas ile kurduğunuz şarta göre filtreleme yapmaz. Eğer with ile yüklenen kayıtlar da aynı şart ile filtrelensin istiyorsanız ona da ayrı şartı ekleyeceksiniz. Mesela detail.extras içinde status sütunu olsun, ona göre filtrelemek isterseniz:
$posts = Post::with([
'extras',
'detail.extras' => function($query) {
$query->where('status', 1);
}
])
->whereHas('detail.extras', function ($query) {
$query->where('status', 1);
})
->where('pages.status','=',1)
->get();