Установка необходимого значения в модели Doctrine - PullRequest
1 голос
/ 15 ноября 2010

Можно ли установить ограничение в модели Doctrine, чтобы все запросы, использующие эту модель, включали это требование?Например, если у меня есть Модель автомобиля , и я хочу убедиться, что для всех результатов, полученных с использованием модели, в базе данных установлено значение active = 1.Я мог бы определить это в каждом отдельном запросе, но, похоже, есть лучший способ.

Cheers!

Ответы [ 3 ]

1 голос
/ 26 января 2011

Я бы воспользовался их удивительными до и после хуками внутри модели.

Пример:

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']);
    }
}

надеюсь, это поможет!

0 голосов
/ 15 ноября 2010

вот ответ на ваш вопрос: создание подкласса объекта запроса доктрины.

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

0 голосов
/ 15 ноября 2010

Я бы сделал это в query -> andWhere ('active =?', 1), но если вы пытаетесь сделать этот "хитрый путь", вы всегда можете создать свой собственный гидратор.

...