LoginSignup
2
3

More than 5 years have passed since last update.

Alloy CollectionからModelを全て削除する

Posted at

AlloyでSQL Sync Adapterを使っているときに、CollectionからModelを全て削除する、つまりテーブル内のレコードを全削除する方法です。

SQL版

Collectionを拡張して全削除用のメソッドを追加、その中で、SQLのDELETE文を発行してレコードを削除します。

その後 sync イベントを発生して、データベースの状態とCollectionを同期させておくようです。

exports.definition = {
  ...
  extendCollection: function(Collection) {
    _.extend(Collection.prototype, {
      deleteAll : function() {
        var collection = this;
        var sql = 'DELETE FROM ' + collection.config.adapter.collection_name;
        var db = Ti.Database.open(collection.config.adapter.db_name);
        db.execute(sql);
        db.close();

        collection.trigger('sync');
      }
    });

    return Collection;
  }
};

ループ版

参考URLには、以下のようにCollectionが持つModelを順番に destroy() していく方法も紹介されていましたが、やはり上記のようにSQLを直接発行する方がパフォーマンス的にも良いようです。

Modelの中身によって削除するかしないかを判別する場合などは、この方法も使えると思います。

while(collection.length > 0) {
  collection.at(0).destroy();
}

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3