2016-08-21 4 views
2

こんにちは私はyiiで複数の行を削除しようとすると、以下のリンクをたどってきましたが、これまで使っていた関数はyiiによって見つからないとしています。 enter image description hereyiiで複数の行を削除するには2

これは私がここでstackoverflowに従ったガイドです。 Delete multiple rows in YII2

これは私が取り組んでいるコードです。ここで何が起こっている

keyfordeletionactivesubjectアクティブレコードにclientidのすべての値を見つけると、その機能を通してそれを削除することですが、それは方法が見つからないと言います。だから、この場合に複数の行を削除する方法や見つからないメソッドの方法を解決する方法はありますか?

答えて

6

これはActiveRecordに静的メソッドdeleteAll()があります。

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

これはclientidが$のclientidであるActiveSubject::tableName()からすべての行を削除します。 $ clientidには、単一値または値の配列を指定できます。

1

foreachを使用して1つずつ削除できます。

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

も外部キーで、リンクされた行を削除し、指令「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 

ので、「建物」の表の行が削除された場合、すべての追加のコードなしで、「室」テーブルの関連レコードも削除されます。 for mysqlこれはInnoDBエンジンでのみ動作します。

関連する問題