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

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


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

В документации Propel можно увидеть таблицы соответствия между ним и типами столбцов MySQL (Propel Column Types). Проблема в том, что не все типы столбцов можно явно указать, например, если в схеме указать нижеследующее, то получим ошибку на счет поля created_at: my_product_i18n: _attributes: { phpName: ProductI18n } id: { type: integer, required: true, primaryKey: true, foreignTable: [...]


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

Это решение проблемы для 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), вывести [...]


Как получить случайную запись из базы

Раньше я делал в контролере таким образом: public function executeRandom() { $c = new Criteria(); $this->catalog = CatalogPeer::doSelect($c); $rand_keys = array_rand($this->catalog, 1); $this->item= $this->catalog[$rand_keys]; }