cakephp1.3+Mysql5 deleteAllはやっぱりauto_incrementを初期化してくれない件
単純に、テーブルの中身を全部消したい場合以下のようにします。
//(引数はこのように設定しないとダメ) $this->Model->deleteAll('1 = 1', false);
なるほど、これで全部消えますがauto_increment属性のキー項目が残念ながら初期化されません。
(insertを実行した場合、1から始まるではなく中途半端な数字から始まります)
そこで、auto_incrementを初期化するため下記のようにしました。
//(引数はこのように設定しないとダメ) $this->Model->deleteAll('1 = 1', false); $sql = "ALTER TABLE Models AUTO_INCREMENT = 1"; $execQuery = $this->Model->query($sql);
これで次回インサート時にもauto_incrementは1からはじまるようになりました。
でも、いちいち実行後にalterするのがめんどくさい!
というのであれば、下記のようにすればいいのかもです。
●1
//(今度は第3引数【コールバック関数有無】を有にする】) $this->Model->deleteAll('1 = 1', false, true);
●2
と、もうひとつ、コールバック関数に下記のとおり設定します。
(cake/libs/model/app_model.php)
class AppModel extends Model { function afterDelete(){ $sql = "ALTER TABLE ".$this->useTable." AUTO_INCREMENT = 1"; $execQuery = $this->query($sql); //print_r($this); } }
これで、どのテーブルを消しても常にauto_incrementは初期化されるようになります。
と、ここまで書いておいてなんですがトランザクションとか関係ねーYO!っていうなら
$sql = "TRUNCATE TABLE テーブル名";
$execQuery = $this->Model->query($sql);
が一番高速で楽なんでしょうねぇ。
以上、念のために色々メモっておきました。