Да.
Если я пропущу тарабарщину, например 'ahjkh', поле в БД будет пустым, даже если я добавлю 'notnull' => true к строке хастаблицы.Вы уверены, что у вас есть это в правильном месте? Я думаю, это должно выглядеть примерно так:
$this->hasColumn(
'category',
'enum',
null,
array(
'values' => array('a', 'b', 'c', 'd'),
'notnull' => true,
'default' => 'a'
)
);
Так что использовать хук проверки, например, prevalidate - есть ли способполучить массив enum из определения таблицы, или мне нужно снова создать массив в этой функции и просто использовать in_array?
Определения столбцов хранятся в таблице, так что вы можете сделать что-то подобное изв экземпляре модели:
$enums = $this->getTable()->getEnumValues('yourEnumFieldName');
if(!in_array($value, $enums)){
// push error to stack
}
Просто для справки: fieldName
- это имя свойства модели, а columnName
- фактическое имя столбца.так же всегда убедитесь, что вы передаетеожидаемый при попытке получить информацию от Doctrine_Table
.
Это может иметь какое-то отношение к эмулируемым или нативным enum
типам, хотя я не уверен, потому что я всегда использую нативный, иэто работает.Вы также можете попробовать установить native:
Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_USE_NATIVE_ENUM, true);
И если это не сработает, вы можете использовать один из проверочных хуков , чтобы убедиться, что он входит в перечисление.