Объявление типов столбцов (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
- Symfony и Propel 1.3: реализация своих joins в методах doSelect*
- Обзор Propel Behaviors в Symfony на примере плагина sfPropelActAsTaggableBehaviorPlugin
- sfPropelPagerI18n: расширяем sfPropelPager для поддержки i18n
- Проблема при использовании sfWidgetFormPropelSelect от плагина sfPropelPlugin
- Symfony: нововведения в новой системе плагинов



est esho odin sposob:
http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Inheritance
s etim sposobom moshna i realisovat “set”-class tip
ili ja oshibajus?
В статье говориться о наследовании. Мне непонятно как это применить к объявлению типов столбцов и главное как указать для Симфони все это в yml?
указывается это дело в schema.xml, заметь не yml.
как я там понял, можна указать свой класс на столбец.
моя идея: сделать класс “ColumnTypeSet” и определить на столбец. в классе можна сделать напр.:
switch($input){case ‘test1′:…
во всяком случае можна по экспериментировать с этим feature.
а можно ли указать sql type: mediumtext ???
desc {type: longvarchar, sqltype: mediumtext} => на выходе type = text
type: clob не подходит
> desc {type: longvarchar, sqltype: mediumtext} => на выходе type = text
Думаю должно сработать. Обрабатывать Propel будет как text,а в CREATE TABLE должен вставить mediumtext. Но надо пробывать.