コレクション

コレクションはモデルの配列を表します。hasMany アソシエーション、または ModelClass クエリメソッドのいずれかによって返されます。

let posts = user.blogPosts;
let posts = schema.blogPosts.all();
let posts = schema.blogPosts.find([1, 2, 4]);
let posts = schema.blogPosts.where({ published: true });

Collection と同一ですが、異種モデルの配列を含むことができるPolymorphicCollectionクラスもあります。そのため、modelNameプロパティはありません。これにより、シリアライザーやシステムの他の部分が異なる方法でこれとやり取りできます。

プロパティ

length: 整数

コレクション内のモデルの数。

user.posts.length; // 2

modelName: 文字列

このコレクションが表す、ダッシュで区切られたモデル名。

let posts = user.blogPosts;

posts.modelName; // "blog-post"

コレクションは空になる可能性があるため、モデル名は実際のモデルとは別です。

models: 配列

このコレクション内のモデルの基となるプレーンなJavaScript配列。

posts.models // [ post:1, post:2, ... ]

コレクションにはfiltersortのような多くの配列のようなメソッドがありますが、mapのようなメソッドを使用する場合、または[]アクセサーを使用する場合は、プレーンな配列を使用すると便利です。

たとえば、テストではコレクションのモデルに対してアサーションを行う必要がある場合があります。

let newPost = user.posts.models[0].title;

assert.equal(newPost, "My first post");

メソッド

add(model: モデル): 任意

このコレクションにモデルを追加します。

posts.length; // 1

posts.add(newPost);

posts.length; // 2

destroy(): 任意

コレクション内のすべてのモデルのデータベースレコードを破棄します。

let posts = user.blogPosts;

posts.destroy(); // all posts removed from db

filter(f: 関数): コレクション

提供されたコールバック関数に従ってフィルタリングされたモデルを含む新しいコレクションを返します。

let publishedPosts = user.posts.filter(post => post.isPublished);

includes(): 真偽値

コレクションに指定されたモデルが含まれているかどうかを確認します。

posts.includes(newPost);

コレクション内に指定されたモデル名とIDが存在するかどうかをチェックすることで機能するため、厳密なオブジェクトの等価性よりも柔軟性があります。

let post = server.create('post');
let programming = server.create('tag', { text: 'Programming' });

visit(`/posts/${post.id}`);
click('.tag-selector');
click('.tag:contains(Programming)');

post.reload();
assert.ok(post.tags.includes(programming));

mergeCollection(collection: コレクション): 任意

別のコレクションからのモデルをマージすることにより、コレクションを変更します。

user.posts.mergeCollection(newPosts);
user.posts.save();

reload(): 任意

コレクション内の各モデルをリロードします。

let posts = author.blogPosts;

// ...

posts.reload(); // reloads data for each post from the db

remove(model: モデル): 任意

このコレクションからモデルを削除します。

posts.length; // 5

let firstPost = posts.models[0];
posts.remove(firstPost);
posts.save();

posts.length; // 4

save(): 任意

コレクション内のすべてのモデルを保存します。

let posts = user.blogPosts;

posts.models[0].published = true;

posts.save(); // all posts saved to db

slice(begin: 整数, end: 整数): コレクション

beginからendまで選択されたモデルのサブセットを含む新しいコレクションを返します。

let firstThreePosts = user.posts.slice(0, 3);

sort(f: 関数): コレクション

提供された比較関数に従ってソートされたモデルを含む新しいコレクションを返します。

let postsByTitleAsc = user.posts.sort((a, b) => {
  return b.title < a.title;
});

toString(): 文字列

コレクションとIDの単純な文字列表現。

user.posts.toString(); // collection:post(post:1,post:4)

update(key: 任意, val: 任意): 任意

コレクション内の各モデルを更新し、すべての変更をデータベースにすぐに永続化します。

let posts = user.blogPosts;

posts.update('published', true); // the db was updated for all posts