Kohana 3.1 ORM: Как реализовать «уникальное» правило проверки? - PullRequest
0 голосов
/ 02 июня 2011

существует ли «уникальное» правило проверки (если да, как его реализовать?) Или должно быть реализовано с помощью обратного вызова?Спасибо.

Ответы [ 3 ]

3 голосов
/ 02 июня 2011

) Насколько я знаю, не существует универсального "уникального" (или "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 , теперь сможет проверять свою уникальность при создании.Надеюсь это поможет!:)

3 голосов
/ 13 января 2012

В Kohana 3.2 ORM имеет метод unique (), который выполняет проверку, я не уверен, существует ли он в 3.1, но он должен.

С этим вы можете просто добавить правило в вашу модельнапример:

array(array($this, 'unique'), array('some_field', ':value')),

, и он проверит, является ли поле some_field уникальным

0 голосов
/ 02 июня 2011
...