1

是否可以在 Doctrine 模型中设置约束,以便使用该模型的所有查询都包含此要求?例如,如果我有一个Car 模型,并且我想确保使用该模型检索到的所有结果都已active = 1在数据库中设置。我可以在每个单独的查询中定义它,但似乎可能有更好的方法。

干杯!

4

3 回答 3

1

我会利用模型内部令人惊叹的前置和后置挂钩。

例子:

class Model_Car extends Model_Base_Car
{
    public function preDqlSelect(Doctrine_Event $event)
    {
        $event->getQuery()->addWhere("active = ?", 1);
    }
}

虽然我没有对此进行测试,但它应该可以工作。过去,我经常使用 pre 和 post 钩子来让我的生活更轻松。例如,我有一个模型想要在每次插入和更新时保存 REMOTE_ADDR,所以我做了以下事情来让我的生活更轻松:

class Model_Example extends Model_Base_Example
{
    public function preInsert(Doctrine_Event $event)
    {
        $this->created_ip = $this->_getRemoteIp();
    }

    public function preUpdate(Doctrine_Event $event)
    {
        $this->updated_ip = $this->_getRemoteIp();
    }

    protected function _getRemoteIp()
    {
        return ip2long($_SERVER['REMOTE_ADDR']);
    }
}

希望这可以帮助!

于 2011-01-25T22:09:20.270 回答
0

我会在查询 ->andWhere('active = ?', 1) 中执行此操作,但如果您想这样做“棘手的方式”,您可以随时构建自己的保湿器。

于 2010-11-15T10:43:33.687 回答
0

这是您问题的答案:子类化学说查询对象。

http://brentertainment.com/2010/03/03/doctrine_query_extra-extending-the-doctrine-query-object/

于 2010-11-15T10:52:18.527 回答