Unique по нескольким полям

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
e-Will
Сообщения: 1
Зарегистрирован: 2017.05.23, 13:53

Unique по нескольким полям

Сообщение e-Will »

Всем привет!
В свободное время изучаю Yii2 и возник следующий вопрос.
Пользователь может иметь несколько/много номеров телефона. Регистрация на сайте по [ username | email | phone ].
Есть класс Phone (сделан по примеру Дмитрия Елисеева):

Код: Выделить всё

/**
* Phone model
*
* @property integer $id
* @property integer $user_fk
* @property integer $county
* @property integer $code
* @property integer $number
* @property boolean $primary
* @property integer $pincode
*/
class Phone extends ActiveRecord
{
....
}
База данных соответствующая.
Хочу сделать валидацию, чтобы номер телефона был уникальным. Телефон проверяется правилами:

Код: Выделить всё

class SignupForm extends Model
{
   ...
   
    public function rules()
    {
        return [
            ....
            ['phone', PhoneValidator::className()],
            ...
        ];
    }
}
PhoneValidator проверяет чтобы в номере хватало цифр, и если не хватает, допустим +7 и т.д., он их добавит или не пройдет валидацию.
Как проверить Phone на 'unique', ведь телефон разбит в базе на 3 сущности ( county | code | number ), а во входящих данных одна строка.
Может есть способ во время валидации её "подготовить" и вызвать 'targetClass' => '\common\models\Phone'.
Спасибо!
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Unique по нескольким полям

Сообщение futbolim »

Посмотрите на UniqueValidator::filter. С его помощью можно выбрать слепленное одно поле и сравнить со значением атрибута
Ответить