代码之家  ›  专栏  ›  技术社区  ›  David Lawson

Kohanav3 ORM:调用where->find_all两次

  •  0
  • David Lawson  · 技术社区  · 15 年前

    当我做如下事情时:

    $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 回复  |  直到 15 年前
        1
  •  0
  •   biakaveron    15 年前

    因为 find_all() find() 方法将重置模型状态。例如, $user 有一个 where('site_id', '=', <site_id>) 条件(应用于代码的第1行)。当你打电话 (查找) , 奥姆 重置所有条件,因此 $nondeletedusers 使用空模型。

    为了避免这种行为,你可以尝试 clone $users,或从中检索所有用户ID $用户 并添加 AND WHERE id IN <id list> 条件。

    推荐文章