Kohanav3 ORM: llamar where-> find_all dos veces
-
26-09-2019 - |
Pregunta
Cuando hago algo parecido a lo siguiente:
$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();
El contenido de $ deletedusers es correcta, pero los $ nondeletedusers contiene cada usuario que no sea eliminado, no sólo los que están en el sitio $ cargado.
¿Qué estoy haciendo mal?
Solución
Su debido a los métodos find_all()
y find()
se restablecerá su estado modelo. Por ejemplo, $user
tiene una condición where('site_id', '=', <site_id>)
(se aplicó en la línea # 1 de su código). Cuando se llama a find_all()
, ORM restablece todas las condiciones, por lo que trabaja con $nondeletedusers
modelo vacío.
Para evitar este comportamiento, se puede tratar de clone
$ usuarios, o recuperar los identificadores de todos los usuarios de $user
y añadir condición AND WHERE id IN <id list>
.