我已经按照下面的链接尝试在Yii中删除多行,但到目前为止,我正在使用的功能说Yii找不到它,请参阅下面的截图。
这是我在StackOverflow中遵循的指南。 Delete multiple rows in YII2
这是我正在处理的代码。
$keyfordeletion = ActiveSubject::find($clientid);
$keyfordeletion->CreateCommand()->deleteAll('subjectcontainer', 'clientid= ' . $clientid)->execute();
这里发生的事情是keyfordeletion
会在clientid
有效记录中找到activesubject
的所有值,并会通过该功能将其删除,但它会说找不到该方法。那么有没有办法在这种情况下删除多行或解决找不到的方法函数?
答案 0 :(得分:9)
在ActiveRecord中有静态方法deleteAll()
。
ActiveSubject::deleteAll(['clientid' => $clientid]);
这将删除ActiveSubject::tableName()
中clientid
为$ clientid的所有行。 $ clientid可以是单值或值数组。
答案 1 :(得分:0)
您可以使用foreach逐个删除。
$deleteall = ActiveSubject::where(['clientid'=>$clientid])->all();
foreach($deleteall as $delete)
{
$delete->delete();
}
答案 2 :(得分:0)
还有一种sql方法可以删除链接的行,使用外键和“on delete cascade”指令:
-
所以如果删除“建筑物”表格中的一行,“房间”表格中的所有相关记录也会被删除 - 无需额外的代码。 对于mysql,这只适用于InnoDB引擎。