views:

26

answers:

1

When I do something like the following:

$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();

The contents of $deletedusers is correct, but the $nondeletedusers contains every non-deleted user, not just the ones in the loaded $site.

What am I doing wrong?

A: 

Its because of find_all() and find() methods will reset your model state. For example, $user has a where('site_id', '=', <site_id>) condition (it was applied in the line#1 of your code). When you call find_all(), ORM resets all conditions, so $nondeletedusers works with empty model.

To avoid this behavior, you can try to clone $users, or retrieve all users ids from $user and add AND WHERE id IN <id list> condition.

biakaveron
I cloned users and it worked :) thanks!!
David Lawson