я исправил это, проблема в том, что в некоторых рядах disponibilites есть etat (NULL), поэтому, если я проверял тип etat (null) в функции обратного вызова, ничего не произойдет, поэтому я добавляю OrWhere ("etat_id", null) и я поменял с withhas
$location = location::with(
[
"locataire",
"prix",
"acceptations",
"distances",
"equipements",
"logement",
"language",
"photo",
"disponibilite" => function ($query) {
$query->whereHas("etat", function ($q) {
$q->where("type", "!=", "archiver");
})->Orwhere("etat_id", null);
}
]
)
->find($id);