PHP Doctrine:过滤已经加载的数据?

时间:2010-03-23 01:01:43

标签: php doctrine

我是Doctrine和ActiveRecord的新手。

如何在加载表后过滤表格?(我认为这比发送多个查询更受欢迎?)

这是'好'还是'坏'?

class UserTable extends Doctrine_Table {
    function filterByGroup($group) {
        $ut = new UserTable();
        foreach($this as $u) {
            if($u->group == $group) $ut->add($u);
        }
        return $ut;
    }
}

编辑:

我知道有一些内置函数可以提供“过滤”功能。但是下面两个代码块在性能方面会有不同的表现吗?

//1
$users = Doctrine_Core::getTable('Users')->findAll();
$admins = Doctrine_Core::getTable('Users')->findByGroupName('admin');
//2
$admins = Doctrine_Core::getTable('Users')->findByGroupName('admin');
$users = Doctrine_Core::getTable('Users')->findAll();

1 个答案:

答案 0 :(得分:2)

首先,你的if语句将$ u->组分配给$ u,而不是比较它们。注意=和==(和===)。

内置“findBy”功能(请参阅http://www.doctrine-project.org/Doctrine_Table/1_2#method_findby)以执行您想要的操作。您当然希望为要过滤的字段设置适当的索引。

在旁注中,您应该避免使用单词“group”作为字段,因为它是SQL关键字。至少,将其命名为“group_name”或其他内容。

无论如何,如果我理解你要做什么,你甚至不需要在UserTable类中添加一个函数。您可以直接从脚本中获取已过滤的值列表:

$users = Doctrine_Core::getTable('User')->findByGroupName($name);