Php 如何删除Yii 2中的多行

Php 如何删除Yii 2中的多行,php,yii2,Php,Yii2,我按照下面的链接尝试删除Yii中的多行,但到目前为止,我使用的函数表示Yii没有找到它,请参见下面的屏幕截图。 这是我在StackOverflow中遵循的指南。 这是我正在编写的代码 $keyfordeletion = ActiveSubject::find($clientid); $keyfordeletion->CreateCommand()->deleteAll('subjectcontainer', 'clientid= ' . $clientid)->execut

我按照下面的链接尝试删除Yii中的多行,但到目前为止,我使用的函数表示Yii没有找到它,请参见下面的屏幕截图。

这是我在StackOverflow中遵循的指南。

这是我正在编写的代码

$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引擎。

只是一个小提示,如果您有任何事件,它不会触发模型中的事件。