Bonjour,
Voila je rencontre un petit problème avec mon code.
J'ai écrit une requête qui me permet de faire une recherche avancée sur mon site. Les résultats sont liés à un modèle et j'utilise donc l'eager loading pour les charger. Mon code ressemble à ça :
$data = InvestorData::query()
->when($investment_min, function ($query, $investment_min) {
return $query->where('funding_min', '>=', $investment_min);
})
->when($investment_max, function ($query, $investment_max) {
return $query->where('funding_max', '<=', $investment_max);
})
->when($investment_type, function ($query, $investment_type) {
return $query->where('funding_type', '=', $investment_type);
})
->when($investment_step, function ($query, $investment_step) {
return $query->where('funding_step', '=', $investment_step);
})
->with(['structure' => function ($query) {
$query->verified();
}])
->paginate($paginate);
Ce que je cherche à obtenir, c'est tout simplement la liste des InvestorData
qui remplissent les conditions des méthodes when
(ce qui fonctionne avec mon code) mais également pouvoir filtrer ces résultats en fonction de contraintes appliquées sur la relation.
Avec le code que j'ai écrit, je n'obtient pas ce que je voulais car, en effet, les contraintes appliquées à Structure
sont exécutées sur la relation et non l'ensemble des résultats. Ainsi j'obtiens bien à la fin une liste de résultats mais dont la relation est null
.
Voila, si vous connaissez un moyen de le faire nativement avec Laravel et Eloquent je suis preneur car, dans un souci de garder le code aussi propre que possible, j'aimerai ne pas avoir à écrire un algorithme lourd pour le faire.
Salut, with
charge la relation qu'elle soit nulle ou non. Si tu veux que la relation existe, il faut coupler le with
avec un whereHas('stucture')