#php #kohana #kohana-3 #kohana-orm
#php #kohana #kohana-3 #kohana-orm
Вопрос:
существует ли «уникальное» правило проверки (если существует, то как его реализовать?) или оно должно быть реализовано с помощью обратного вызова? Спасибо.
Ответ №1:
) Насколько я знаю, не существует универсального «уникального» (или «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, теперь сможет проверять свою уникальность при создании.
Надеюсь, это поможет! 🙂
Комментарии:
1. Еще раз спасибо! Я реализовал очень похожее решение.
Ответ №2:
В Kohana 3.2 ORM есть метод unique (), который выполняет проверку, я не уверен, существует ли он в 3.1, но он должен.
С этим вы можете просто добавить правило в свою модель следующим образом:
array(array($this, 'unique'), array('some_field', ':value')),
и это проверит, является ли some_field уникальным
Комментарии:
1. Да, в KO 3.2 это работает «из коробки» как по волшебству. В любом случае, вопрос относится к версии v3.1. Спасибо!
Ответ №3:
Прочитайте это: http://kohanaframework.org/3.1/guide/kohana/security/validation