На днях вышла долгожданная новая версия достаточно популярного в узких кругах 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”. Нужно будет изучить этот вопрос.
One Ping to “Propel 1.3”
9 Responses to “Propel 1.3”
-
1. muxx Says:
August 20th, 2008 at 23:32Да, такое можно делать, самому недавно пригодилась данная возможность. Вообще перейти с 1.2 на 1.3 не составляет труда, особенно если не писались селекты ручками, выполнить пару команд в консоли, и проект уде на тройке. Опять же блог у меня с самого запуска работает на 1.3, скоро год как, никаких нареканий, единственное, поначалу не поддерживался логгинг запросов, сейчас вроде все в поряде.
-
2. FX Poster Says:
August 20th, 2008 at 23:45Уверен, что можно? doSelectJoin*() тоже будут фетчить только записи с
is_hidden = false? Потому как в Propel 1.2 фетчинг со связями выполняется отдельно и приходится прописывать всё отдельно… Или пользоваться sfMixer’ом (что в случае работы с Symfony нормально, а вот в общем случае - это проблема Propel’а). -
3. muxx Says:
August 21st, 2008 at 08:42Извини, ввел в заблуждение, у меня тогда задача не затрагивала селекты с джоинами, поэтому я даже не заметил. Сейчас посмотрел: и в 1.2, и в 1.3 они независимы от обычных селектов.
-
4. npFly Says:
August 21st, 2008 at 15:55Забыл ещё упоменуть про Table inheritance ;)
Вообще разница между 1.2 и 1.3 достаточно огромная. One-to-One очень порадовал. Насчет Instance Pooling в 1.2 как раз таки не отображал то решение для которого его сделали зато в 1.3 у него появился кэш всзвязке с которым он и работает как Identity map. Тоесть один раз получив обьект из базы все остальные его вызовы делаютса из кэша, а так же обновляют его при сохранение в базу. -
5. FX Poster Says:
August 21st, 2008 at 20:16npFly
Я не забыл, я о ней и не знал. У нас щас на работе все силы идут на доработку WebSale.com.ua, так что даже посмотреть времени нет.npFly, muxx
А вы почему, собственно, оба ко мне в аську не стукнулись? :) -
6. muxx Says:
August 21st, 2008 at 23:08FX Poster
Извини, что-то не понял, по какому вопросу мы должны были стучаться?) -
7. FX Poster Says:
August 22nd, 2008 at 10:39 -
8. npFly Says:
August 22nd, 2008 at 13:32Я стучался в skype. ICQ у меня нету.
-
9. FX Poster Says:
August 22nd, 2008 at 21:14npFly
Ничего мне не приходило… :(





September 1st, 2008 at 02:38
[...] Propel 1.3 [...]