在Doctrine模型中创建静态查找方法是一种好习惯

时间:2010-10-21 15:04:49

标签: zend-framework doctrine

有时我的查找程序很复杂,而且在控制器中重复这段代码我感觉很脏。

现在我在想,有可能做到这样的事情:

class User extends BaseUser
{

    private static function getTable()
    {
        return Doctrine_Core::getTable('User');
    }

    public static function findAll()
    {
        return getTable()->findAll();
    }

    public function currentEnrolments() {
        $query = Doctrine_Query::create()
                ->from('Enrolment e')
                ->where('e.user_id = ?', $this->id)
                ->addWhere('e.finish_date IS NULL');
        return $query->execute();
    }

}

这是一个好习惯吗?或者我应该只将非静态成员放在我所显示的查询中?

2 个答案:

答案 0 :(得分:2)

一般来说,如果它能节省你的时间,那么就没有什么可以失去的,每一分钟你都可以节省下来。

getTablefindAll这样的功能可能不会为您节省很多,但是查找更适合您应用的内容的自定义查询肯定是值得的。

答案 1 :(得分:1)

我的方法几乎相同。

  • 我不会打扰getTable()findAll()的静态代理。
    • 这并没有真正为您的代码添加任何价值
    • 我,personnaly,永远不会像你通常需要的那样在任何模型对象上调用findAll()
      • 交叉检查外键
      • paginate / sort
      • ...
  • 关于你的currentEnrolments()函数,这是值得的,因为你对->addWhere('e.finish_date IS NULL')有一些逻辑,因此解释你不能使用“神奇的”教义关系->Enrolment。也许这是Doctrine 2正在解决的问题,需要检查一下......

此致