コンテンツの取得
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 パラメータを使用して、特定の条件に一致するコンテンツを取得します。
slug が my-first-blog-post のブログ記事を取得する例を以下に示します。
const data = await client.tables.blog.list({
filter: {
slug: "my-first-blog-post",
},
});一致
slug が my-first-blog-post と一致するデータを取得します。
{
slug: "my-first-blog-post",
}= 演算子を使用して、一致を明示的に指定することも可能です。
{
slug: { "=": "my-first-blog-post" },
}不一致
!= 演算子を使用して、特定の値と一致しないデータを取得します。
slug が my-first-blog-post ではないデータを取得する例を以下に示します。
{
slug: { "!=": "my-first-blog-post" },
}大小比較
以下の演算子を使用して、数値や文字列の大小比較を実行できます。
<: より小さい>: より大きい<=: 以下>=: 以上
price の値を比較して条件を満たすデータを取得する例を以下に示します。
// より小さい
{ price: { "<": 1000 } }
// より大きい
{ price: { ">": 1000 } }
// 以下
{ price: { "<=": 1000 } }
// 以上
{ price: { ">=": 1000 } }IN, NOT IN
$in 演算子を使用して、特定の値のリストに一致するデータを取得します。
slug が my-first-blog-post または my-second-blog-post のデータを取得する例を以下に示します。
{
slug: { "$in": ["my-first-blog-post", "my-second-blog-post"] },
}$notIn 演算子を使用して、特定の値のリストに一致しないデータを取得することも可能です。
slug が my-first-blog-post または my-second-blog-post ではないデータを取得する例を以下に示します。
{
slug: { "$notIn": ["my-first-blog-post", "my-second-blog-post"] },
}文字列の部分一致
文字列の部分一致検索には $contains を使用します。
slug に my- を含むデータを取得する例を以下に示します。
{
slug: { "$contains": "my-" },
}$notContains を使用すると、文字列が含まれないデータを取得できます。
slug に my- を含まないデータを取得する例を以下に示します。
{
slug: { "$notContains": "my-" },
}AND, OR
オブジェクトに複数のプロパティを指定することで、AND条件でデータを取得できます。
category が book で、price が1000以下のデータを取得する例を以下に示します。
{
category: "book",
price: { "<=": 1000 },
}明示的に $and 演算子を使用することも可能です。
{
$and: [
{ category: "book" },
{ price: { "<=": 1000 } },
],
}$or 演算子を使用して、複数の条件をORで結合することも可能です。
以下は、category が book で price が1000以下のデータ、または category が movie のデータを取得する例です。
{
$or: [
{ category: "book", price: { "<=": 1000 } },
{ category: "movie" },
],
}ANDやORをネストすることも可能です。
以下は、category が book で price が1000以下のデータ、または category が movie のデータを取得する例です。
{
$or: [
{ $and: [{ category: "book" }, { price: { "<=": 1000 } }] },
{ category: "movie" },
],
}関連テーブルのフィルタ
関連テーブルのフィルタリングも可能です。
relatedArticle テーブルの article フィールドが my-first-blog-post のデータを取得する場合は以下のように記述します。
{
relatedArticle: {
article: { slug: "my-first-blog-post" },
},
}ページネーション
取得件数とオフセットを指定してデータを分割取得します。
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 },
});詳細は 関連テーブルの取得 を参照してください。