Почему я получаю сообщение “сбой валидатора” при сохранении Doctrine на Symfony 1.2?
Вопрос
Допустим, у меня есть схема YAML, выглядящая примерно так :
Note:
options:
type: MyISAM
collate: utf8_unicode_ci
charset: utf8
actAs: { Timestampable: ~ }
columns:
content: { type: string, notnull: true}
order_id: int(5)
user_id : int
relations:
User:
foreignAlias: Notes
local: user_id
foreign: id
type: one
foreignType: man
onDelete: CASCADE
При выполнении :
$note->setOrderId(0);
$note->save();
Я получаю следующую ошибку :
1 validator failed on order_id (type)
MySQL хранит order_id как bigint(20).
Я использую Ubuntu 9.10, Symfony 1.2, PHP 5 и MySQL 5.
Редактировать :
Получил подсказку, если я удалю все упоминания о размере в файле YAML, я получу вторую ошибку валидатора для order_id (длина) :-)
Решение
Я понял это.Замена "int" на "integer" и избавление от размера сделали свое дело.Теперь файл YAML выглядит следующим образом :
Note:
options:
type: MyISAM
collate: utf8_unicode_ci
charset: utf8
actAs: { Timestampable: ~ }
columns:
content: { type: string, notnull: true}
order_id: integer
user_id : integer
relations:
User:
foreignAlias: Notes
local: user_id
foreign: id
type: one
foreignType: man
onDelete: CASCADE
Я попробовал это, потому что у других людей в сети были похожие ошибки, решил заменить "varchar" на "string".
Если кто-то зациклится на этом и прочтет этот ответ, выпейте пива от их имени :-)
Другие советы
Я знаю, что это устарело...
Я просто подумал, что мог бы уточнить, что допустимыми типами doctrine являются "integer", "string", "float", "decimal", "object", "clob", "blob", "enum", "array".
Затем Doctrine преобразует тип doctrine в правильный тип базы данных для выбранного серверного модуля.
Вот почему "int" не удалось выполнить проверку типа, но "integer" работает.