Aug 20

На днях вышла долгожданная новая версия достаточно популярного в узких кругах ORM - Propel 1.3.

Из интересных мне нововведений:

  • В основе Propel 1.3 лежит новый механизм работы с базами данных - PDO, который заменил Creole и привел к ощутимому повышению скорости работы.
  • Теперь не нужно вручную загружать классы Propel и свои модели - теперь это делается автоматически (через autoloading в PHP)
  • “Object Instance Pooling”, или, как его называет небезызвестный Фаулер - Identity Map. Причем, что самое интересное, это работает не только с retrieveByPk(), но и со всему doSelect*()-методами (в зависимости от переданных аргументов), что позволяет ускорить работу засчет отсутствия лишних запросов к бд, а также ненужности построения одинаковых обьектов несколько раз.
  • Связи один-к-одному теперь поддерживаются нативно (блин, хочу много-ко-многим!)
  • Куча мелких (и не очень) исправлений и улучшений

Поподробнее можно прочитать на RedoTheWeb, в также на офсайте Propel.

PS. Сам еще не юзал, но нужно будет попробовать. На мой взгляд, самый интересный момент связан с тем, можно ли переопределить фетчинг записей, например - выбирать только записи с is_hidden = false, да так, чтобы переопределять пришлось только одну функцию.

Update: Как написали на официальном блоге Symfony - “Object Instance Pooling is not an Identity Map because the database request is still needed”. Нужно будет изучить этот вопрос.

written by fxposter \\ tags: , ,

One Ping to “Propel 1.3”

  1. rpsblog.com » A week of symfony #86 (18->24 august 2008) Says:

    […] Propel 1.3 […]


9 Responses to “Propel 1.3”

  1. 1. muxx Says:

    Да, такое можно делать, самому недавно пригодилась данная возможность. Вообще перейти с 1.2 на 1.3 не составляет труда, особенно если не писались селекты ручками, выполнить пару команд в консоли, и проект уде на тройке. Опять же блог у меня с самого запуска работает на 1.3, скоро год как, никаких нареканий, единственное, поначалу не поддерживался логгинг запросов, сейчас вроде все в поряде.

  2. 2. FX Poster Says:

    Уверен, что можно? doSelectJoin*() тоже будут фетчить только записи с is_hidden = false? Потому как в Propel 1.2 фетчинг со связями выполняется отдельно и приходится прописывать всё отдельно… Или пользоваться sfMixer’ом (что в случае работы с Symfony нормально, а вот в общем случае – это проблема Propel’а).

  3. 3. muxx Says:

    Извини, ввел в заблуждение, у меня тогда задача не затрагивала селекты с джоинами, поэтому я даже не заметил. Сейчас посмотрел: и в 1.2, и в 1.3 они независимы от обычных селектов.

  4. 4. npFly Says:

    Забыл ещё упоменуть про Table inheritance ;)
    Вообще разница между 1.2 и 1.3 достаточно огромная. One-to-One очень порадовал. Насчет Instance Pooling в 1.2 как раз таки не отображал то решение для которого его сделали зато в 1.3 у него появился кэш всзвязке с которым он и работает как Identity map. Тоесть один раз получив обьект из базы все остальные его вызовы делаютса из кэша, а так же обновляют его при сохранение в базу.

  5. 5. FX Poster Says:

    npFly
    Я не забыл, я о ней и не знал. У нас щас на работе все силы идут на доработку WebSale.com.ua, так что даже посмотреть времени нет.

    npFly, muxx
    А вы почему, собственно, оба ко мне в аську не стукнулись? :)

  6. 6. muxx Says:

    FX Poster
    Извини, что-то не понял, по какому вопросу мы должны были стучаться?)

  7. 7. FX Poster Says:

    По этому.

  8. 8. npFly Says:

    Я стучался в skype. ICQ у меня нету.

  9. 9. FX Poster Says:

    npFly
    Ничего мне не приходило… :(

Leave a Reply