Skip to content

Instantly share code, notes, and snippets.

@kwbtdisk
Last active September 8, 2023 06:17
Show Gist options
  • Save kwbtdisk/87020ef4ad6f5d73c4b29bbfe959f49d to your computer and use it in GitHub Desktop.
Save kwbtdisk/87020ef4ad6f5d73c4b29bbfe959f49d to your computer and use it in GitHub Desktop.
CORE Framework Javascript SDK: データを取得・検索する ($core.$models) 前編 https://youtu.be/-v4n8mLze70 & 後編 https://youtu.be/J6HZIReGkrE
/**
* データの取得の基本: await $core.$models.[modelName].find()
* - デフォルト 100件まで, 取得順のデフォルト: idの降順(DESC)
**/
await $core.$models.selectOptionsMaster.find()
// IDで1件のみ取得(ID 10のものを取得): findById(10)
await $core.$models.selectOptionsMaster.findById(10)
// 取得件数制御, 5件のみ (デフォルト 100): find({ limit: 5 })
await $core.$models.selectOptionsMaster.find({ limit: 5 })
// sort 表示順制御 (昇順): find({limit: 5, sort: 'colName'})
await $core.$models.selectOptionsMaster.find({limit: 5, sort: 'createdAt'}) // 作成日 昇順
await $core.$models.selectOptionsMaster.find({limit: 5, sort: 'value'}) // 値 昇順
await $core.$models.selectOptionsMaster.find({limit: 5, sort: '-createdAt'}) // 作成日 降順
await $core.$models.selectOptionsMaster.find({limit: 5, sort: 'group,-createdAt'}) // グループ 昇順, 作成日 降順
/**
* データの検索 型
**/
await $core.$models.[modelName].find({
filter: {
[フィールド名]: {
[operator]: '値'
}
}
})
// 検索の例: グループ名が "勘定科目" で一致するものを検索
await $core.$models.selectOptionsMaster.find({filter: { group: { _eq: "勘定科目"}}})
// 検索の例: グループ名に "勘定科目" が 含まれるものを検索
await $core.$models.selectOptionsMaster.find({filter: { group: { _contain: "勘定科目"}}})
/**
* 検索の "値" の Type定義
**/
export type FindValueBasicTypes =
| '$CURRENT_USER' // 現在のユーザID, 利用例: {filters: { editor: {_eq: '$CURRENT_USER' } }}
| '$NOW' // 現在時刻, 利用例: {filters: { publishedAt: {_gte: '$NOW' } }}
| string
| number
| boolean
/**
* 検索の "値" の Type定義
**/
export type FindValueBasicTypes =
// 現在のユーザID, 利用例: {filters: { editor: {_eq: '$CURRENT_USER' } }}
| '$CURRENT_USER'
// 現在時刻, 利用例: {filters: { publishedAt: {_gte: '$NOW' } }}
| '$NOW'
| string
| number
| boolean
// 作成者がログイン中のユーザである "選択肢マスタ" を取得
await $core.$models.selectOptionsMaster.find({filter: {userCreated: {_eq: '$CURRENT_USER'}}})
/**
* filter: {} の Type定義
**/
export type FindFilterOperations = {
// = (Equal)
// await $core.models.selectOptionsMaster.find({ filter: { group: { _eq: "勘定科目" } } })
_eq?: FindValueBasicTypes
// <> (Not equal)
// .find({ filter: { group: { _neq: "勘定科目" } } })
_neq?: FindValueBasicTypes
// LIKE "%something%"
// .find({ filter: { group: { _contains: "勘定科目" } } })
_contains?: string
// NOT LIKE "%something%"
// .find({ filter: { group: { _ncontains: "勘定科目" } } })
_ncontains?: string
// IN ('A', 'B', 'C')
// .find({ filter: { group: { _in: ["勘定科目", "経費種別"] } } })
_in?: FindValueBasicTypes[]
// NOT IN ('A', 'B', 'C')
// .find({ filter: { group: { _nin: ["勘定科目", "経費種別"] } } })
_nin?: FindValueBasicTypes[]
// 経費申請.日付(date)が 2021-10-01 〜 2021-10-31 (date型)
// await $core.$models.expenses.find({ filter: { date: { _between: ["2021-10-01", "2021-10-31"] } } })
// 作成日が 2021-10-01 〜 2021-10-31 (datetime型)
// .find({ filter: { createdAt: { _between: ["2021-10-01 00:00:00", "2021-10-31 23:59:59"] } } })
_between?: [FindValueBasicTypes, FindValueBasicTypes]
// 作成日が 2021-10-01 〜 2021-10-31 ではないもの (datetime型)
// .find({ filter: { createdAt: { _nbetween: ["2021-10-01 00:00:00", "2021-10-31 23:59:59"] } } })
_nbetween?: [FindValueBasicTypes, FindValueBasicTypes]
// > 123 (Greater than なので gt)
// .find({ filter: { createdAt: { _gt: "2021-10-31 23:59:59" } } })
_gt?: FindValueBasicTypes
// >= '2021-01-01' (Greater than equal なので gte)
// .find({ filter: { createdAt: { _gte: "2021-10-31 23:59:59" } } })
_gte?: FindValueBasicTypes
// < '2021-01-01' (Less than なので lt)
// .find({ filter: { createdAt: { _lt: "2021-10-31 23:59:59" } } })
_lt?: FindValueBasicTypes
// <= '2021-01-01' (Less than equal なので lte)
// .find({ filter: { createdAt: { _lte: "2021-10-31 23:59:59" } } })
_lte?: FindValueBasicTypes
// IS NULL
_null?: true
// IS NOT NULL
_nnull?: true
// IS EMPTY
_empty?: true
// IS NOT EMPTY
_nempty?: true
_or?: { [columnName: string]: FindFilterOperations }[] // OR 条件でネスト可能
_and?: { [columnName: string]: FindFilterOperations }[] // AND 条件でネスト可能
}
/**
* OR条件の組み合わせ は 配列にする。
* filter: { _or: [{...}, {...}] }
* 条件1: 作成日が10月以降のもの
* { createdAt: { _gte: "2021-10-01 00:00:00" } }
* または、条件2: group 名が 'taskStatus' のもの
* { group: {_eq: 'taskStatus'} }
* SQLで書くと:
* ```sql
* SELECT * FROM selectOptionsMaster
* WHERE
* `createdAt` >= "2021-10-01 00:00:00"
* OR
* `group` = 'taskStatus'
* ```
*/
await $core.$models.selectOptionsMaster.find({
filter: {
_or: [
{ createdAt: { _gte: "2021-10-01 00:00:00" } },
{ group: {_eq: 'taskStatus'} },
]
}
})
/**
* OR条件とAND条件の組み合わせ: _or と _and を正しく利用する
* filter: { _or: [ { _and: [{...}, {...}]} , {...}] }
* 条件1: 作成日が10月以降のもので "勘定" をグループ名に含むもの
* { createdAt: { _gte: "2021-10-01 00:00:00" }, group: { _contains: "勘定"} }
* または、条件2: group 名が 'taskStatus' のもの
* { group: {_eq: 'taskStatus'} }
* SQLで書くと:
* ```sql
* SELECT * FROM selectOptionsMaster
* WHERE
* (`createdAt` >= "2021-10-01 00:00:00" AND `group` LIKE "%勘定%" )
* OR
* (`group` = 'taskStatus')
* ```
*/
await $core.$models.selectOptionsMaster.find({
filter: {
_or: [
{
_and: [
{ createdAt: { _gte: "2021-10-01 00:00:00" } },
{ group: { _contains: "勘定"} }
],
},
{ group: {_eq: 'taskStatus'} },
]
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment