Правило проверки внешнего ключа в Yii2

У меня есть parent_id, который может иметь значение NULL — по умолчанию установлено значение 0.

Модель

...
[['parent_id'], 'integer'],
[['parent_id'], 'default', 'value' => 0],
[['parent_id'], 'exist', 'targetAttribute' => 'id', 'skipOnEmpty' => true],
...

Но правило exist не сработало.

Что я делаю неправильно?

ОБНОВЛЕНИЕ

Сегодня я удалил следующее правило, и оно работает:

...
[['parent_id'], 'default', 'value' => 0],
...

Но что мне делать, если я хочу изменить значение по умолчанию на другое значение?


person Marsick    schedule 02.08.2016    source источник
comment
Вы должны определить targetClass и targetAttribute для этого правила. [['parent_id'], 'exist', 'targetClass' => 'app\models\Parent', 'targetAttribute' => 'id', 'skipOnEmpty' => true],   -  person ThanhPV    schedule 03.08.2016
comment
У меня targetAttribute, targetClass по умолчанию такая же модель.   -  person Marsick    schedule 03.08.2016
comment
Могу я спросить, почему у вас есть как NULL, так и 0 в качестве возможных значений для этого столбца? Разве они не означают одно и то же?   -  person Clyff    schedule 03.08.2016
comment
Не оба, если я создаю новую запись, я не устанавливаю parent_id, поэтому она NULL, но в базу данных устанавливается значение по умолчанию - 0.   -  person Marsick    schedule 03.08.2016
comment
Что значит не сработало? Позволяет вставлять строки с несуществующим родительским идентификатором? Или выдает какое-то исключение? Пробовали ли вы изменить порядок правил (переместите правило default в конец)?   -  person oakymax    schedule 05.08.2016


Ответы (1)


изменить порядок правил:

[['parent_id'], 'integer'],
[['parent_id'], 'exist', 'targetAttribute' => 'id', 'skipOnEmpty' => true],
[['parent_id'], 'default', 'value' => 0],
person oakymax    schedule 05.08.2016
comment
Большое спасибо! Я не думал о порядке правил. - person Marsick; 05.08.2016