Запись опубликована (Программирование) от ingvar в 27-08-2008 23:26
Запись опубликована (MySQL) от ingvar в 27-08-2008 23:08
Поддержка триггеров появилась в MySQL 5.0.2. Триггер - это аналог процедуры, который ассоциируется с конкретной таблицей и запускается при наступлении определенных событий связанных с этой самой таблицей. Событий для таблиц всего несколько: INSERT, DELETE, UPDATE.
Пример триггера INSERT для таблицы News - записываем в поле `created_at` дату и время создания записи. Конечно можно было воспользоваться TIMESTAMP, но в данном случае это сделано в качестве простого примера:
Читать дальше
Запись опубликована (Symfony) от ingvar в 24-08-2008 02:26
sfPropelPager - это встроенная в Propel функциональность, которая позволяет организовать Пейджинг (Propel Pager), т.е. разбивку на страницы. Работает великолепно, ознакомиться подробнее можно в статье How to paginate a list. Описанные ниже действия проводились на Propel 1.3.
Принцип работы простой, сначала делается запрос на определение количества записей, а далее получаем данные с учетом количества их на странице. Например, имеем Propel ORM объекты News и NewsI18n.
Читать дальше
Запись опубликована (MySQL) от ingvar в 23-08-2008 20:29
Оператор BETWEEN идеально подходит для сравнения диапазона между датами (datetime). Но тут есть подводные камни. Например, есть задача - выбрать данные из таблицы за некоторый промежуток времени (с ‘2008-08-14′ по ‘2008-08-23′).
Рекомендации:
1. Выполняя любые сравнения, приводить все данные к одному типу.
2. Если один операнд имеет значение типа TIMESTAMP или DATETIME, а другой является константой, операнды сравниваются как значения типа TIMESTAMP. А это значит, что если была строка в виде ‘2008-08-14′, то она автоматически преобразуется в TIMESTAMP ‘2008-08-14 00:00:00′ и это влияет на результат запроса.
3. Над данными, которые участвуют в условиях сравнения желательно не делать никаких операций - это позволяет для них использовать индексы, иначе они игнорируются.
Читать дальше
Запись опубликована (Symfony) от ingvar в 22-08-2008 23:31
В Symfony для Propel есть такая замечательная функциональность как Behaviors. Благодаря Behavior можно расширять существующие модели без необходимости изменять код самой модели. Фактически получает имитация “множественного” наследования. Зачем это надо? К примеру есть вот такой интересный плагин sfPropelActAsTaggableBehaviorPlugin - задумка прекрасная, сделать возможность добавлять теги для любых моделей. Чтобы активировать Behaviors нужно в propel.ini включить их.
Читать дальше
Запись опубликована (Symfony) от ingvar в 17-08-2008 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 }
Читать дальше
Запись опубликована (Symfony) от Igor в 16-08-2008 23:42
С каждым днем система плагинов становится все лучше. Благодаря отличной обратной связи комьюнити, в течении недели были внесены следующие изменения:
• К плагину можно загрузить рисунок, который выводиться во вкладке “Plugin Information” и используется в RSS.
• Чтобы присоединиться к команде разработчиков плагина теперь нужно указать причину. Ранее это не требовалось. На основании этой информации руководитель плагина может принять или отклонить запрос.
• С главной страницы можно просмотреть плагины по категориям или перейти на список всех плагинов.
• Появилась вкладка “Изменений” (Changelog). Информация добавляется из файла package.xml. В FAQ можно ознакомиться как все это работает.
• Обновили RSS с целью отображение более подробной информации.
• Каждый пользователь представлен через систему gravatar.
Оригинал поста: The plugin system gets better
Запись опубликована (Symfony) от Igor в 13-08-2008 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. Но для новой версии материал не соответствует действительности. Чтобы все заработало, следует сделать следущее.
Читать дальше
Запись опубликована (Symfony) от Igor в 11-08-2008 15:47
sfPropelPlugin это плагин для работы с Propel 1.3. Текущая версия 1.3.0 stable от 28/05/2008. Наткнулся на проблему при использовании виджета sfWidgetFormPropelSelect. Если указать порядок сортировки, то получаем ошибку на экран.
Читать дальше
Запись опубликована (Symfony) от Igor в 10-08-2008 12:41
Использую Symfony, я перешел на стандарт кодирования от Symfony, что позволяет писать плагины и работать в едином стиле.
Читать дальше