Skip to Content
FeaturesCMS SDKコンテンツの取得

コンテンツの取得

CMS SDKを使用したコンテンツ取得の方法を説明します。このドキュメントでは以下の内容を解説します。

  • IDとユニークキーによる単体コンテンツの検索
  • フィルタ、ページネーション、ソートを使った複数コンテンツの検索
  • 全文検索によるコンテンツの検索
  • 履歴データの取得
  • フォーム受信データの取得

IDによる検索

指定したIDでコンテンツを1件取得します。

const data = await client.tables.blog.get(id);

関連テーブルの取得

関連テーブルのデータを同時に取得する場合は、include オプションを使用します。
取得したいテーブルを true に設定してください。

const data = await client.tables.blog.get(id, { include: { category: true }, });

複数の関連テーブルを取得することも可能です。

const data = await client.tables.blog.get(id, { include: { category: true, publisher: true, }, });

関連テーブルのネストも可能です。
relatedArticle テーブルの article フィールドを取得する場合は以下のように記述します。

const data = await client.tables.blog.get(id, { include: { relatedArticle: { article: true, }, }, });

公開コンテンツのみの取得

下書きコンテンツを含めるかは draft オプションで制御します。
デフォルトは true で、下書きコンテンツも含めて取得します。

公開コンテンツのみを取得するには、draft オプションを false に設定します。

const data = await client.tables.blog.get(id, { draft: false, });

ユニークキーによる検索

ユニークキーを使用してデータを1件取得します。

const data = await client.tables.blog.getByUnique({ slug: "my-first-blog-post", });

関連テーブルの取得

関連テーブルのデータを同時に取得する場合は、include オプションを使用します。

const data = await client.tables.blog.getByUnique( { slug: "my-first-blog-post", }, { include: { category: true }, }, );

詳細は 関連テーブルの取得 を参照してください。

公開コンテンツのみの取得

下書きコンテンツを含めるかは draft オプションで制御します。
デフォルトは true で、下書きコンテンツも含めて取得します。

公開コンテンツのみを取得するには、draft オプションを false に設定します。

const data = await client.tables.blog.getByUnique( { slug: "my-first-blog-post", }, { draft: false, }, );

複数件の検索

複数のコンテンツを取得します。

const data = await client.tables.blog.list({});

フィルタ

filter パラメータを使用して、特定の条件に一致するコンテンツを取得します。

slugmy-first-blog-post のブログ記事を取得する例を以下に示します。

const data = await client.tables.blog.list({ filter: { slug: "my-first-blog-post", }, });

一致

slugmy-first-blog-post と一致するデータを取得します。

{ slug: "my-first-blog-post", }

= 演算子を使用して、一致を明示的に指定することも可能です。

{ slug: { "=": "my-first-blog-post" }, }

不一致

!= 演算子を使用して、特定の値と一致しないデータを取得します。
slugmy-first-blog-post ではないデータを取得する例を以下に示します。

{ slug: { "!=": "my-first-blog-post" }, }

大小比較

以下の演算子を使用して、数値や文字列の大小比較を実行できます。

  • <: より小さい
  • >: より大きい
  • <=: 以下
  • >=: 以上

price の値を比較して条件を満たすデータを取得する例を以下に示します。

// より小さい { price: { "<": 1000 } } // より大きい { price: { ">": 1000 } } // 以下 { price: { "<=": 1000 } } // 以上 { price: { ">=": 1000 } }

IN, NOT IN

$in 演算子を使用して、特定の値のリストに一致するデータを取得します。
slugmy-first-blog-post または my-second-blog-post のデータを取得する例を以下に示します。

{ slug: { "$in": ["my-first-blog-post", "my-second-blog-post"] }, }

$notIn 演算子を使用して、特定の値のリストに一致しないデータを取得することも可能です。
slugmy-first-blog-post または my-second-blog-post ではないデータを取得する例を以下に示します。

{ slug: { "$notIn": ["my-first-blog-post", "my-second-blog-post"] }, }

文字列の部分一致

文字列の部分一致検索には $contains を使用します。
slugmy- を含むデータを取得する例を以下に示します。

{ slug: { "$contains": "my-" }, }

$notContains を使用すると、文字列が含まれないデータを取得できます。
slugmy- を含まないデータを取得する例を以下に示します。

{ slug: { "$notContains": "my-" }, }

AND, OR

オブジェクトに複数のプロパティを指定することで、AND条件でデータを取得できます。
categorybook で、price が1000以下のデータを取得する例を以下に示します。

{ category: "book", price: { "<=": 1000 }, }

明示的に $and 演算子を使用することも可能です。

{ $and: [ { category: "book" }, { price: { "<=": 1000 } }, ], }

$or 演算子を使用して、複数の条件をORで結合することも可能です。
以下は、categorybookprice が1000以下のデータ、または categorymovie のデータを取得する例です。

{ $or: [ { category: "book", price: { "<=": 1000 } }, { category: "movie" }, ], }

ANDやORをネストすることも可能です。
以下は、categorybookprice が1000以下のデータ、または categorymovie のデータを取得する例です。

{ $or: [ { $and: [{ category: "book" }, { price: { "<=": 1000 } }] }, { category: "movie" }, ], }

関連テーブルのフィルタ

関連テーブルのフィルタリングも可能です。 relatedArticle テーブルの article フィールドが my-first-blog-post のデータを取得する場合は以下のように記述します。

{ relatedArticle: { article: { slug: "my-first-blog-post" }, }, }

module-array のフィルタ

テーブルモジュールmodule-array 型カラムに対して、配列要素を条件にフィルタリングできます。 someeverynone の3つの module-array フィルター演算子を使用します。

以下の説明では、次のスキーマを前提とします。

orizm.config.ts
import { defineConfig } from "@orizm/cli/config"; export default defineConfig({ tableModules: { tag: { columns: { name: { type: "string", required: true }, priority: { type: "integer" }, }, }, }, tables: { article: { columns: { title: { type: "string", required: true }, tags: { type: "module-array", moduleName: "tag", }, }, }, }, });
some

少なくとも1つの配列要素が条件を満たすコンテンツを取得します。

tagspriority が4以上の要素を少なくとも1つ持つ記事を取得する例を以下に示します。

const data = await client.tables.article.list({ filter: { tags: { some: { priority: { ">=": 4 }, }, }, }, });
every

すべての配列要素が条件を満たすコンテンツを取得します。

すべての tagspriority が3以上の記事を取得する例を以下に示します。

const data = await client.tables.article.list({ filter: { tags: { every: { priority: { ">=": 3 }, }, }, }, });
none

どの配列要素も条件を満たさないコンテンツを取得します。

name"Script" を含むタグを持たない記事を取得する例を以下に示します。

const data = await client.tables.article.list({ filter: { tags: { none: { name: { $contains: "Script" }, }, }, }, });
複合条件

同一の module-array カラムに対して、複数の module-array フィルター演算子を同時に指定できます。 条件はANDで結合されます。

priority が4以上のタグを少なくとも1つ持ち、かつ name"Script" を含むタグを持たない記事を取得する例を以下に示します。

const data = await client.tables.article.list({ filter: { tags: { some: { priority: { ">=": 4 } }, none: { name: { $contains: "Script" } }, }, }, });
空オブジェクトの挙動

module-array フィルター演算子に空オブジェクト {} を渡した場合の挙動は以下の通りです。

  • some: {} - 少なくとも1つの配列要素が存在するコンテンツを取得します
  • every: {} - 条件なし(すべてのコンテンツが該当します)
  • none: {} - 配列要素が1つも存在しないコンテンツを取得します

ページネーション

取得件数とオフセットを指定してデータを分割取得します。

const data = await client.tables.blog.list({ limit: 10, offset: 0, });

limit パラメータを指定しない場合、デフォルトで100件まで取得されます。

ソート

指定したカラムでデータを並び替えます。

const data = await client.tables.blog.list({ order: { createdAt: "desc" }, });

複数のカラムでソートすることも可能です。

const data = await client.tables.blog.list({ order: { status: "asc", createdAt: "desc" }, });

複数のカラムを指定した場合、先に指定したカラムから順番にソートされます。 上記の例では、status で昇順ソートした後に createdAt で降順ソートします。

関連テーブルの取得

関連テーブルのデータを同時に取得する場合は include オプションを使用します。

const data = await client.tables.blog.list({ include: { category: true }, });

詳細は 関連テーブルの取得 を参照してください。

公開データのみの取得

下書きデータを含めるかは draft オプションで制御します。
デフォルトは true で、下書きデータも含めて取得します。

公開データのみを取得するには、draft オプションを false に設定します。

const data = await client.tables.blog.list({ draft: false, });

全文検索

テーブルの全文検索機能が有効な場合のみ利用可能です。詳細は 全文検索 を参照してください。

query パラメータにキーワードを指定して全文検索を実行します。

const data = await client.tables.blog.search({ query: "JavaScript", });

フィルタ

search() メソッドは list() メソッドと比較して、filter オプションで使用できるパラメータに制約があります。

filter パラメータでは group のみ使用可能です。
以下のようなフィルタは search() では使用できません。

// ❌ searchメソッドでは使用不可 const data = await client.tables.blog.search({ query: "JavaScript", filter: { status: "published", createdAt: { ">=": "2024-01-01" }, }, }); // ✅ listメソッドでは使用可能 const data = await client.tables.blog.list({ filter: { status: "published", createdAt: { ">=": "2024-01-01" }, }, });

グループによる絞り込みのみ使用できます。

const data = await client.tables.blog.search({ query: "JavaScript", filter: { group: "tech-articles", }, });

ソート

order パラメータは使用できません。検索結果は関連度順で固定されます。

履歴の取得

テーブルの履歴管理機能が有効な場合のみ利用可能です。 詳細は 履歴管理 を参照してください。

特定のコンテンツの編集履歴を取得します。

const history = await client.tables.blog.listHistory(id);

ページネーション

デフォルトでは最新の10件が取得されます。
ページネーションパラメータで件数とオフセットを指定できます。

const history = await client.tables.blog.listHistory(id, { limit: 20, offset: 0, });

フォーム受信データの取得

テーブルのフォーム管理機能が有効な場合のみ利用可能です。詳細は フォーム管理 を参照してください。

フォームから送信された受信データを取得します。

submissions() メソッドでフォームIDを指定し、その後 list() メソッドで受信データのリストを取得します。

const submissions = await client.tables.form.submissions(formId).list({});

フィルタ

filter パラメータを使用して、特定の条件に一致する受信データを取得します。

詳細は 複数件の検索 を参照してください。

ページネーション

const submissions = await client.tables.form.submissions(formId).list({ limit: 20, offset: 0, });

limit パラメータを指定しない場合、デフォルトで100件まで取得されます。

ソート

const submissions = await client.tables.form.submissions(formId).list({ order: { createdAt: "desc" }, });

複数のカラムでソートすることも可能です。

const submissions = await client.tables.form.submissions(formId).list({ order: { status: "asc", createdAt: "desc" }, });

複数のカラムを指定した場合、先に指定したカラムから順番にソートされます。 上記の例では、status で昇順ソートした後に createdAt で降順ソートします。

関連テーブルの取得

関連テーブルのデータを同時に取得する場合は include オプションを使用します。

const submissions = await client.tables.form.submissions(formId).list({ include: { relatedData: true }, });

詳細は 関連テーブルの取得 を参照してください。

Last updated on