2016-08-21 32 views
2

你好我已经按照下面的链接试图实现在yii中删除多行,但到目前为止我使用的函数说它不能被yii找到,请参见下面的截图。 enter image description here如何在yii中删除多行2

这是我在这里遵循的指南在stackoverflow。 Delete multiple rows in YII2

这是我正在处理的代码。

这里发生的事情是,keyfordeletion会发现clientid所有值在activesubject活动记录,并通过该功能删除它,但它说,该方法没有找到。那么在这种情况下是否有任何方法可以删除多行或解决未找到的方法功能?

回答

6

在ActiveRecord中有静态方法deleteAll()

ActiveSubject::deleteAll(['clientid' => $clientid]); 

这将从ActiveSubject::tableName()删除所有行clientid为$的clientid。 $ clientid可以是单个值或数组值。

1

你可以使用foreach逐个删除。

$deleteall = ActiveSubject::where(['clientid'=>$clientid])->all(); 
    foreach($deleteall as $delete) 
    { 
     $delete->delete(); 
    } 
0

也有删除链接排,外键和“删除级联”指令一个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 

因此,如果在“建设”表中的行被删除,所有来自“房间”表的相关记录也会被删除 - 无需额外的代码。对于mysql来说这只是与InnoDB引擎一起工作的 。