Jun 18 2010

Зарелизили Propel 1.5.2

Category: Symfonyingvar @ 10:25

С момента релиза предыдущей версии Propel прошло меньше месяца. Текущая версия Propel 1.5.2 имеет обратную совместимость с веткой 1.5. За это время было исправлено более чем 20 багов, добавлены новые фичи. Полный список изменений.

Список новых возможностей

  • Поддержка Namespace
  • Aggregate Column Behavior — позволяет повесить Behavior на изменение поля с помощью агрегатной функции
  • ModelCriteria::findOneOrCreate() — делается выборка данных используя findOne(), если результат пустой, то создается новая запись
  • Simple Templating Engine For Behaviors — создавать Behaviors стало проще
  • Query Comments — в выполняемый SQL запрос стало возможным добавлять комментарии, что очень полезно при анализе журналов выполненных запросов
  • Miscellaneous — рефакторинг автозагрузчика Model, чтобы разделить загрузку  классов «Core Propel» и классов Model, что увеличит время загрузки и упрощает интеграцию со сторонними библиотеками

Детальнее про все возможности можно почитать на официальном сайте Propel blog: Propel 1.5.2 Released.

Читать дальше


Jun 02 2010

sfPropel15Plugin: видео урок по редактированию в backend вложенных форм с использованием mergeRelation и embedRelation

Category: Symfonyingvar @ 12:18

В новой версии плагина sfPropel15Plugin появилось два новых инструмента: sfFormPropel::embedRelation(), and sfFormPropel::mergeRelation(). Они позволяют добавлять, редактировать и удалять вложенные объекты на странице основного объекта. Детально с новой функциональностью можно ознакомиться просмотрев видео:

mergeRelation from Francois Zaninotto on Vimeo.

Все новые возможности уже доступны и задокументированы http://trac.symfony-project.org/browser/plugins/sfPropel15Plugin/trunk/doc/form.txt.

Источник:
Embed Relation Forms in One Line with sfPropel15Plugin (Video)

P.S.
В Doctrine тоже присутствует такая же функциональность: Advanced Forms: Easily Embedding Doctrine-Related Forms


May 02 2009

Left Join с несколькими условиями для Propel Criteria

Category: Symfonyingvar @ 19:16

Бывают ситуации, когда нужно получить запрос c оператором Left Join указав несколько условных выражений. Например:

SELECT * FROM news
LEFT JOIN news_type ON news.type_id = news_type.id AND YEAR(news.published_at) = YEAR(NOW())
WHERE news.is_published = 1 AND ...
LIMIT 10

Читать дальше


Nov 27 2008

Symfony: Propel предзагрузка объектов (preload objects)

Category: Symfonyingvar @ 22:33

Цель: уменьшить количество запросов для таблиц использующих много внешних ключей.

Описание проблемы: имеем 4 таблицы: news, news_i18n, news_type и news_type_i18n. На странице нужно отобразить список из 20 новостей, используя все перечисленные таблицы. А это 21 запрос. Методы doSelectWithI18n и doSelectJoinAll не позволяют получить значения i18n NewsTypePeer для NewsPeer с минимальным количеством запросов к БД.

Решение проблемы: вместо 21 запроса к БД выполнить 2. Механизм — использовать предзагрузку объектов NewsTypePeer со значениями i18n.

Читать дальше


Aug 24 2008

sfPropelPagerI18n: расширяем sfPropelPager для поддержки i18n

Category: Symfonyingvar @ 02:26

sfPropelPager — это встроенная в Propel функциональность, которая позволяет организовать Пейджинг (Propel Pager), т.е. разбивку на страницы. Работает великолепно, ознакомиться подробнее можно в статье How to paginate a list. Описанные ниже действия проводились на Propel 1.3.

Принцип работы простой, сначала делается запрос на определение количества записей, а далее получаем данные с учетом количества их на странице. Например, имеем Propel ORM объекты News и NewsI18n.
Читать дальше


Aug 22 2008

Обзор Propel Behaviors в Symfony на примере плагина sfPropelActAsTaggableBehaviorPlugin

Category: Symfonyingvar @ 23:31

В Symfony для Propel есть такая замечательная функциональность как Behaviors. Благодаря Behavior можно расширять существующие модели без необходимости изменять код самой модели. Фактически получает имитация «множественного» наследования. Зачем это надо? К примеру есть вот такой интересный плагин sfPropelActAsTaggableBehaviorPlugin — задумка прекрасная, сделать возможность добавлять теги для любых моделей. Чтобы активировать Behaviors нужно в propel.ini включить их.
Читать дальше


Aug 17 2008

Объявление типов столбцов (enum, datetime, tinytext, year) для MySQL, которые явно не поддерживаются в Propel 1.3

Category: Symfonyingvar @ 22:06

В документации Propel можно увидеть таблицы соответствия между ним и типами столбцов MySQL (Propel Column Types). Проблема в том, что не все типы столбцов можно явно указать.
Если попытаться указать поле типа ENUM, то при генерировании SQL получим ошибку:

Cannot map unknown Propel type 'ENUM' ...
Cannot map unknown Propel type 'ENUM' to native database type ..

Похожая ситуация наблюдается и в следующем примере. Например, если в схеме указать нижеследующее, то получим ошибку на счет поля created_at ( Cannot map unknown Propel type ‘DATETIME’ to native database type ):

my_product_i18n:
_attributes: { phpName: ProductI18n }
id:          { type: integer, required: true, primaryKey: true, foreignTable: my_product, foreignReference: id }
culture:     { isCulture: true, type: varchar, size: 7, required: true, primaryKey: true }
name:        { type: varchar, size: 50 }
created_at:  { type: datetime }

Читать дальше


Aug 13 2008

Symfony и Propel 1.3: реализация своих joins в методах doSelect*

Category: SymfonyIgor @ 01:12

Это решение проблемы для Symfony 1.1 и Propel 1.3, когда нужно из двух таблиц объединенных черех join получить все данные. Т.е. хотим выполнить такой запрос

SELECT news.NEWS_ID, news.CATEGORY_ID, news.TITLE, news.BODY, news.CREATED_AT, 
    news_category.CATEGORY_ID, news_category.NAME
FROM `news`
LEFT JOIN news_category ON (news.CATEGORY_ID=news_category.CATEGORY_ID)

А вот с этим проблема, если таблицы не связаны через внешний ключ (foreign key), вывести данные из второй таблицы news_category проблематично, но возможно. В основе материал: Applying custom joins in doSelect* method. Но для новой версии материал не соответствует действительности. Чтобы все заработало, следует сделать следущее.

Читать дальше


Aug 11 2008

Проблема при использовании sfWidgetFormPropelSelect от плагина sfPropelPlugin

Category: SymfonyIgor @ 15:47

sfPropelPlugin это плагин для работы с Propel 1.3. Текущая версия 1.3.0 stable от 28/05/2008. Наткнулся на проблему при использовании виджета sfWidgetFormPropelSelect. Если указать порядок сортировки, то получаем ошибку на экран.

Читать дальше