Kohanav3 ORM:调用where-> find_all两次

时间:2010-06-10 09:17:31

标签: php kohana-3 kohana-orm

当我做以下事情时:

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

$ deletedusers的内容是正确的,但$ nondeletedusers包含每个未删除的用户,而不仅仅是加载的$ site中的用户。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

由于find_all()find()方法,它会重置您的模型状态。例如,$user具有where('site_id', '=', <site_id>)条件(它已应用于代码的第1行)。当您致电find_all()时, ORM 会重置所有条件,因此$nondeletedusers适用于空模型。

要避免此行为,您可以尝试clone $个用户,或从$user检索所有用户ID并添加AND WHERE id IN <id list>条件。