如何在ActiveRecord中定义外键约束?

如何在ActiveRecord中定义外键约束?,activerecord,yii2,Activerecord,Yii2,我想在ActiveRecord中定义外键约束,例如,user.id到article.user\u id 在删除用户时,到目前为止我知道的是:user::afterDelete()(afterSave)或handle eventActiveRecord::event\u AFTER\u DELETE(event\u AFTER\u SAVE) 另一种方法是使用数据库的外键约束来实现这一点 Yi2提供了更好的方法吗?您可以使用migration或migration命令。 在Yii2迁移中,有一个命令

我想在ActiveRecord中定义外键约束,例如,user.id到article.user\u id

在删除用户时,到目前为止我知道的是:
user::afterDelete()
(afterSave)或handle event
ActiveRecord::event\u AFTER\u DELETE
(event\u AFTER\u SAVE)

另一种方法是使用数据库的外键约束来实现这一点


Yi2提供了更好的方法吗?

您可以使用migration或migration命令。 在Yii2迁移中,有一个命令 此命令生成一条SQL语句,用于将外键约束添加到现有表中

例如:


如果您不能使用DBMS验证外键完整性(例如,如果您的底层DBMS是带有MyISAM表的MySQL),那么强制执行它的方法是使用

此验证器允许您检查数据库中是否存在某个模型。例如,如果您有一本
书籍
,其中正好有一位
作者
,请将以下内容添加到
书籍
规则()


这个验证器对于创建更复杂的条件也很有用,比如“书的作者必须存在,并且评分超过N”。

是的,我只是忘了在问题描述中提到它。如果它是你要找的,或者它对你有用,请给它评分,或者检查它是否被接受。Otherview请更好地解释您的问题这是一个解决方案,但不是我要找的。删除后或数据库约束不能满足您的需求有什么原因吗?
 $this->addForeignKey('fk1', 'table1', 'foreign_id', 'table2', 'id','CASCADE','CASCADE');
['author_id', 'exist', 'targetClass' => Author::className(), 'targetAttribute' => 'id'],