Объявление типов столбцов (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: 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
Вы можете оставить комментарий или подписаться на RSS feed
Коментарии
главный минус, что при переезде на новую базу (не MySQL) вы создадите себе лишнюю работу потому что:
- “tinytext”: в MySQL тип TINYTEXT эквивалентен VARCHAR(255)
- “enum” и языки: ограничивать языки таким способом есть не красиво - если появляется новый язык, Вам надо будет менять схему (регенерация модели) во всех *_i18n таблицах - и спрашивается на что такое счастье?
- “datetime”: если Вы фанат оптимизации, то ставить DATETIME (8 байт) заместо TIMESTAMP (4 байта) не в Ваших же интересах
- “year”: вещь конечно же интересная, когда будем хранить только год в 4 или в 2 символах, да и места занимает мало (1 байт в обоих случаях), но для полной переносимости на другую базу лучше остановиться на TINYINT (1 байт)
что очень важно отметить, то что никто и не подумал добавить возможность указывать тип UNSIGNED, а это действительно полезная мелочь


Здорово, а то вечно приходилось избегать использования этих типов.