是否可以在Doctrine模型中设置约束,以便使用该模型的所有查询都包含此要求?例如,如果我有 Car model ,并且我想确保使用模型检索的所有结果都在数据库中设置了active = 1
。我可以在每个单独的查询中定义它,但似乎可能有更好的方法。
干杯!
答案 0 :(得分:1)
我会在模型中利用他们惊人的前后挂钩。
示例:
class Model_Car extends Model_Base_Car
{
public function preDqlSelect(Doctrine_Event $event)
{
$event->getQuery()->addWhere("active = ?", 1);
}
}
虽然我没有对此进行测试,但它应该可行。我过去常常使用前后挂钩来让我的生活变得更轻松。例如,我有一个模型想要在每个插入和更新上保存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']);
}
}
希望这有帮助!
答案 1 :(得分:0)
我会在查询中执行此操作 - > andWhere('active =?',1),但是如果你想要做这个“棘手的方法”,你可以随时建立自己的保湿器。
答案 2 :(得分:0)
这里是你的问题的答案:继承doctrine查询对象。
http://brentertainment.com/2010/03/03/doctrine_query_extra-extending-the-doctrine-query-object/