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