モデルクエリ - Finderメソッド
Finderメソッドは、`SELECT`クエリを生成するメソッドです。
デフォルトでは、すべてのFinderメソッドの結果は、(プレーンなJavaScriptオブジェクトではなく)モデルクラスのインスタンスです。これは、データベースが結果を返した後、Sequelizeがすべてを適切なインスタンスオブジェクトに自動的にラップすることを意味します。結果が多すぎる場合は、このラッピングが非効率になることがあります。このラッピングを無効にしてプレーンなレスポンスを受け取るには、Finderメソッドにオプションとして`{ raw: true }`を渡します。
`findAll`
`findAll`メソッドは、前のチュートリアルですでに知られています。これは、テーブルからすべてのエントリを取得する標準の`SELECT`クエリを生成します(たとえば、`where`句などで制限されていない場合)。
`findByPk`
`findByPk`メソッドは、指定された主キーを使用して、テーブルから1つのエントリのみを取得します。
const project = await Project.findByPk(123);
if (project === null) {
console.log('Not found!');
} else {
console.log(project instanceof Project); // true
// Its primary key is 123
}
`findOne`
`findOne`メソッドは、見つかった最初のエントリ(オプションのクエリオプションが指定されている場合は、それを満たすもの)を取得します。
const project = await Project.findOne({ where: { title: 'My Title' } });
if (project === null) {
console.log('Not found!');
} else {
console.log(project instanceof Project); // true
console.log(project.title); // 'My Title'
}
`findOrCreate`
`findOrCreate`メソッドは、クエリオプションを満たすエントリが見つからない限り、テーブルにエントリを作成します。どちらの場合も、インスタンス(見つかったインスタンスまたは作成されたインスタンス)と、そのインスタンスが作成されたか、すでに存在していたかを示すブール値を返します。
`where`オプションはエントリの検索に使用され、`defaults`オプションは何も見つからなかった場合に作成する必要があるものを定義するために使用されます。 `defaults`にすべての列の値が含まれていない場合、Sequelizeは`where`に指定された値(存在する場合)を使用します。
`username`と`job`を持つ`User`モデルを持つ空のデータベースがあるとします。
const [user, created] = await User.findOrCreate({
where: { username: 'sdepold' },
defaults: {
job: 'Technical Lead JavaScript',
},
});
console.log(user.username); // 'sdepold'
console.log(user.job); // This may or may not be 'Technical Lead JavaScript'
console.log(created); // The boolean indicating whether this instance was just created
if (created) {
console.log(user.job); // This will certainly be 'Technical Lead JavaScript'
}
`findAndCountAll`
`findAndCountAll`メソッドは、`findAll`と`count`を組み合わせた便利なメソッドです。これは、`limit`と`offset`を使用してデータを取得する必要があるが、クエリに一致するレコードの総数も知る必要があるページネーション関連のクエリを処理する場合に役立ちます。
`group`が指定されていない場合、`findAndCountAll`メソッドは2つのプロパティを持つオブジェクトを返します
- `count` - 整数 - クエリに一致するレコードの総数
- `rows` - オブジェクトの配列 - 取得したレコード
`group`が指定されている場合、`findAndCountAll`メソッドは2つのプロパティを持つオブジェクトを返します
- `count` - オブジェクトの配列 - 各グループのカウントと射影された属性が含まれます
- `rows` - オブジェクトの配列 - 取得したレコード
const { count, rows } = await Project.findAndCountAll({
where: {
title: {
[Op.like]: 'foo%',
},
},
offset: 10,
limit: 2,
});
console.log(count);
console.log(rows);