2016-08-21 81 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引擎一起工作的 。