RSS Feed

Doctrine & ZF Cheat Sheet

Posted on Понедельник, декабря 15, 2008 in Doctrine, ZendFramework

Тут я приведу несколько часто используемых мной приемов для работы с Doctrine и (или) ZF.

1. Выбока по id с проверкой на существование записи:

$courier = Doctrine::getTable("Couriers")->find($this->_getParam('id'));
if ($courier===FALSE) throw new Exception("courierId не найден");
$this->view->courier=$courier->toArray();


Теперь по строкам:

  1. Выбираем из модели Couriers запись с id который нам передал Zend Framework через Router в параметр id.
  2. Если запись не найденна но генерим новое исключение.
  3. Передаем «виеву» массив данных от записи.

2. Сбор все related записей у модели

Как неидеальный пример:

$query = new Doctrine_Query();
$query->from('CityAddress ca,ca.CityStreets cs,cs.CityRegions cr')
         >where("id=?",intval($id) );
$result = $query->execute( array(),Doctrine::HYDRATE_ARRAY );


Что вернет нам не только запись но и все «привязанные» записи (hasOne, hasMany)

3. NOW()
Вернуть текущее время и дату

$messages->date_delivery=new Doctrine_Expression('NOW()');

4. Last Insert ID
Вернуть последний добавленный ID записи

$lastInsertedId=$model->getIncremented();

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 73

Bring on the comments

  1. Alex:

    if ($courier===FALSE) throw new Exception(«courierId не найден»);

    А мне такой подход не нравится. Что будет когда пользователь зайдет на страницу с неизвестным ID – он увидит исключение Или работу его обработчика.

    ИМХО лучше делать так
    If ($courier===FALSE) $this->view->is_valid = false;

    А во вью уже проверять. И тогда пользователь увидит в привычном дизайне, что объект не найден, а скажем другие блоки страницы покажутся как обычно.

    Либо еще можно наплодить множество классов исключений (Я так делал раньше).
    Например, throw new Topics_Not_Found_Exception (параметры)

    А уже обработчик определит, что это объект именно такого класса и с учетом переданных параметров обработает его как надо (загрузит соответсвующее вью и т.д.)
    Но этот метод уступает первому по производительности. И вообще эксепшены в пхп – достаточно медленная штука.

  2. каждый делает как ему удобно, у меня exception обрабатываются визуально в дизайне сайта. так что пользователь получает не дебаг страницу какуюнить, а просто красивую ошибку =)

Leave a Reply