.findOrCreate()
指定された条件に一致するレコードを検索します。そのようなレコードが存在しない場合は、提供された初期値を使用してレコードを作成します。
var newOrExistingRecord = await Something.findOrCreate(criteria, initialValues);
または、新規レコードが作成されたかどうかを確認する必要がある場合は、
Something.findOrCreate(criteria, initialValues)
.exec(function(err, newOrExistingRecord, wasCreated) {
});
# | 引数 | 型 | 詳細 |
---|---|---|---|
1 | criteria | データベース内のレコードを照合するために使用するWaterline クライテリアです。**この特定のクライテリアは、常にデータベース内で正確にゼロまたは1つのレコードに一致する必要があります。** | |
2 | initialValues | 新規レコードが作成された場合の初期値。 |
引数 | 型 | 詳細 | |
---|---|---|---|
1 | err | 発生したエラー、またはエラーがない場合はundefined 。 |
|
2 | newOrExistingRecord | 検出されたレコード、またはそのようなレコードが見つからない場合はundefined 。 |
|
3 | wasCreated | 新規レコードが作成されたかどうか。 |
名前 | 型 | いつ発生するか |
---|---|---|
UsageError | 無効な値が渡された場合にスローされます。 | |
AdapterError | データベースアダプタでエラーが発生した場合にスローされます。 | |
Error | 予期せぬことが発生した場合にスローされます。 |
SailsとWaterlineでのエラー処理の例については、概念 > モデルとORM > エラーを参照してください。
テストユーザーのFinnが存在することを確認しましょう。
User.findOrCreate({ name: 'Finn' }, { name: 'Finn' })
.exec(async(err, user, wasCreated)=> {
if (err) { return res.serverError(err); }
if(wasCreated) {
sails.log('Created a new user: ' + user.name);
}
else {
sails.log('Found existing user: ' + user.name);
}
});
- このメソッドは、
await
、プロミスチェーン、または従来のNodeコールバックで使用できます。await
を使用する場合は、結果がレコードのみになることに注意してください。wasCreated
にはアクセスできません。- 内部的には、これは
.findOne()
を使用しているため、データベース内の複数のレコードが指定された条件に一致する場合、それを説明するエラーが発生します。