) Насколько я знаю, не существует универсального "уникального" (или "is_unique") правила класса валидации.Это, вероятно, из-за нерегулярного характера такого рода проверки.
Однако, если вы хотите сделать это красиво, вы можете создать «базовую модель» для всех ваших моделей, которые вы используете в своем приложении (сделать их расширение базовое).Затем уникальность можно проверить более или менее следующим образом:
public function is_unique($id)
{
return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
->from($this->_table_name)
->where('id', '=', $id)
->execute()
->get('total');
}
В ваших правилах проверки вы должны добавить это правило:
array('id' => array(array(array($this, 'is_unique')));
У меня есть внутренние правила модели, хранящиеся вметод rules()
, как рекомендуется.Так что может быть живым примером:
class Model_Base_Model extends ORM
{
public function rules()
{
return array(
'id' => array(
array(array($this, 'is_unique')),
);
}
public function is_unique($id)
{
return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
->from($this->_table_name)
->where('id', '=', $id)
->execute()
->get('total');
}
}
Теперь каждая модель, расширяющая Model_Base_Model , теперь сможет проверять свою уникальность при создании.Надеюсь это поможет!:)