2015-08-27 4 views
2

Я хочу определить ограничение внешнего ключа в ActiveRecord, например user.id, в article.user_id.Как определить ограничение внешнего ключа в ActiveRecord?

При удалении пользователя, что я знаю до сих пор: User::afterDelete() (afterSave) или событие обработки ActiveRecord::EVENT_AFTER_DELETE (EVENT_AFTER_SAVE).

другой способ использует ограничение внешнего ключа базы данных для этого.

Предоставляет ли Yii2 лучший способ сделать это?

+0

Есть ли причина, по которой проблемы после удаления или базы данных не отвечают вашим потребностям? – marche

ответ

1

Вы можете использовать команду миграции или миграции. В миграции Yii2 Class yii\db\Migration есть addForeignKey() coomand Этот commandi создает инструкцию SQL для добавления ограничения внешнего ключа к существующей таблице.

например:

$this->addForeignKey('fk1', 'table1', 'foreign_id', 'table2', 'id','CASCADE','CASCADE'); 
+0

Да, я просто забыл упомянуть об этом в вопросе desc. – haoliang

+0

Если это то, что вы ищете, или если это полезно для вас, оцените его и/или проверьте как принято. Otherview, пожалуйста, лучше объясните свой вопрос – scaisEdge

+0

это решение, но не то, что я ищу. – haoliang

1

Если вы не можете использовать СУБД для проверки целостности внешнего ключа (например, если ваш нижележащих СУБД MySQL с таблицами MyISAM), способ для обеспечения его использования "unique" validator ,

Этот валидатор позволяет проверить, существует ли определенная модель в вашем db. Например, если у вас есть Book, что имеет ровно один Author, добавьте следующие строки в Book «s rules():

['author_id', 'exist', 'targetClass' => Author::className(), 'targetAttribute' => 'id'], 

Этот валидатор также полезен для создания более сложных условий, как«автор Книги должны существовать и также Рейтинг больше, чем N ".

Смежные вопросы