Kohanav3 ORM: appeler where-> find_all deux fois
-
26-09-2019 - |
Question
Quand je fais quelque chose comme ce qui suit:
$site = ORM::factory('site')->where('name', '=', 'Test Site')->find();
$users = $site->users;
$deletedusers = $users->where('deleted', '=', '1')->find_all();
$nondeletedusers = $users->where('deleted', '=', '0')->find_all();
Le contenu de $ deletedusers est correct, mais les nondeletedusers de $ contient tous les utilisateurs de non supprimés, pas seulement ceux du site chargé $.
Qu'est-ce que je fais mal?
La solution
Son à cause des méthodes de find_all()
et find()
réinitialisera votre état modèle. Par exemple, $user
a une condition de where('site_id', '=', <site_id>)
(il a été appliqué dans la ligne n ° 1 de votre code). Lorsque vous appelez find_all()
, ORM remet à zéro toutes les conditions, donc $nondeletedusers
fonctionne avec le modèle vide.
Pour éviter ce problème, vous pouvez essayer de clone
$ utilisateurs, ou récupérer tous les utilisateurs ids de $user
et ajouter la condition de AND WHERE id IN <id list>
.