是否可以在 Doctrine 模型中设置约束,以便使用该模型的所有查询都包含此要求?例如,如果我有一个Car 模型,并且我想确保使用该模型检索到的所有结果都已active = 1
在数据库中设置。我可以在每个单独的查询中定义它,但似乎可能有更好的方法。
干杯!
是否可以在 Doctrine 模型中设置约束,以便使用该模型的所有查询都包含此要求?例如,如果我有一个Car 模型,并且我想确保使用该模型检索到的所有结果都已active = 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']);
}
}
希望这可以帮助!
我会在查询 ->andWhere('active = ?', 1) 中执行此操作,但如果您想这样做“棘手的方式”,您可以随时构建自己的保湿器。
这是您问题的答案:子类化学说查询对象。
http://brentertainment.com/2010/03/03/doctrine_query_extra-extending-the-doctrine-query-object/