我是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();
答案 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);