Php 如何删除Yii 2中的多行
我按照下面的链接尝试删除Yii中的多行,但到目前为止,我使用的函数表示Yii没有找到它,请参见下面的屏幕截图。 这是我在StackOverflow中遵循的指南。 这是我正在编写的代码Php 如何删除Yii 2中的多行,php,yii2,Php,Yii2,我按照下面的链接尝试删除Yii中的多行,但到目前为止,我使用的函数表示Yii没有找到它,请参见下面的屏幕截图。 这是我在StackOverflow中遵循的指南。 这是我正在编写的代码 $keyfordeletion = ActiveSubject::find($clientid); $keyfordeletion->CreateCommand()->deleteAll('subjectcontainer', 'clientid= ' . $clientid)->execut
$keyfordeletion = ActiveSubject::find($clientid);
$keyfordeletion->CreateCommand()->deleteAll('subjectcontainer', 'clientid= ' . $clientid)->execute();
这里发生的事情是,
keyfordeletion
将在activesubject
活动记录中找到clientid
的所有值,并通过该函数将其删除,但它表示找不到该方法。那么,在这种情况下,有没有办法删除多行,或者解决找不到method函数的问题呢?ActiveRecord中有一个静态方法deleteAll()
ActiveSubject::deleteAll(['clientid' => $clientid]);
这将删除
ActiveSubject::tableName()
中的所有行,其中clientid
为$clientid$clientid可以是单个值或值数组。您可以使用foreach逐个删除
$deleteall = ActiveSubject::where(['clientid'=>$clientid])->all();
foreach($deleteall as $delete)
{
$delete->delete();
}
还有一种使用外键和“on delete cascade”指令删除链接行的sql方法:
CREATE TABLE buildings (
building_no int(11) NOT NULL AUTO_INCREMENT,
building_name varchar(255) NOT NULL,
address varchar(355) NOT NULL,
PRIMARY KEY (building_no)
) ENGINE=InnoDB;
CREATE TABLE rooms (
room_no int(11) NOT NULL AUTO_INCREMENT,
room_name varchar(255) NOT NULL,
building_no int(11) NOT NULL,
PRIMARY KEY (room_no),
KEY building_no (building_no),
CONSTRAINT rooms_ibfk_1
FOREIGN KEY (building_no)
REFERENCES buildings (building_no)
ON DELETE CASCADE
) ENGINE=InnoDB
所以,如果删除了“building”表中的一行,那么“rooms”表中的所有相关记录也会被删除,而不需要额外的代码。
对于mysql,这只适用于InnoDB引擎。只是一个小提示,如果您有任何事件,它不会触发模型中的事件。