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

Запись опубликована (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 }


Рабочий пример для enum, datetime, tinytext, date:


my_product_i18n:
_attributes: { phpName: ProductI18n }
id:          { type: integer, required: true, primaryKey: true, foreignTable: my_product, foreignReference: id }
culture:     { isCulture: true, type: varchar, sqltype:enum, size: "'ru_RU','uk_UA','en_EN'", default: ru_RU, required: true, primaryKey: true }
name:        { type: varchar, size: 50 }
description: { type: longvarchar, sqltype:tinytext }
year:        { type: date, sqltype:year }
year2:       { type: varchar, sqltype:year }
created_at:  { type: timestamp, sqltype:datetime }

Зачем столбец culture переделали в тип enum? С точки зрения оптимизации базы данных. Минусы такого решения:
• языки указываются жестко
• админка ещё не проверялась

Единственное, что не удалось так это задействовать тип столбца set.

Ссылки по теме:
Propel user guide: Column Types
Propel ticket #462: more datatypes for mysql
Propel ticket #77: Add ENUM support for MySQL



Комментарии:

Оставить комментарий