Валидация unique с фильтром

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Марат
Сообщения: 10
Зарегистрирован: 2022.05.04, 17:48

Валидация unique с фильтром

Сообщение Марат »

Добрый день. У меня есть модель Products в которой есть поля:

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

 * @property int $id
 * @property int $category_id Country
 * @property string $name_product Name product
Как мне прописать валидацию так, чтобы поле "$name_product" была уникальное для определенной "$category_id". Т.е. есть данные:

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

Array
(
    [0] => [
    		"category_id" => "3",
    		"name_product" => "apple",
	],
    [1] => [
    		"category_id" => "3",
    		"name_product" => "ananas",
	],
    [2] => [
    		"category_id" => "3",
    		"name_product" => "apple",
	],
)
Должен выдать ошибку, что продукт "apple" уже есть у категории "3". Что-то вроде этого:

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

    public function rules()
    {
        return [
            [['name_product'], 'required'],
            [['name_product'], 'string', 'max' => 255],
            [['category_id'], 'integer'],
            [['category_id'], 'exist', 'skipOnError' => true, 'targetClass' => Category::className(), 'targetAttribute' => ['category_id' => 'id']],
            ['name_product', 'unique', 'filter' => 'category_id = 3']
        ];
    }
Только "3" должна приходить из входных данных в коде "'filter' => 'category_id = 3'". Помогите пожалуйста.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Валидация unique с фильтром

Сообщение samdark »

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

['name_product', 'unique', 'targetAttribute' => ['name_product', 'category_id']]
Марат
Сообщения: 10
Зарегистрирован: 2022.05.04, 17:48

Re: Валидация unique с фильтром

Сообщение Марат »

samdark писал(а): 2022.07.24, 23:05

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

['name_product', 'unique', 'targetAttribute' => ['name_product', 'category_id']]
При добавление новой записи валидация не срабатывает. После того как запись уже создана, при редактирование с теми же данными, валидация срабатывает. Что делать?
Ответить