findAndUpdate<T extends DbBaseModel> method
Future<DbResult<T> >
findAndUpdate<T extends DbBaseModel>(
- String table,
- DbFilter filter,
- DbUpdate update, {
- DbFindUpdateOptions? findUpdateOptions,
- required T converter(),
override
查找并更新单条记录
- DbResult.success 当 DbResult.result!=null 时为true
- DbResult.rescode 返回结果的数量 或 异常标识
-1
- DbResult.result 类型
T
的实例 或 null - 注意:如果DbFindUpdateOptions.$upsert为true 但是 DbFindUpdateOptions.$returnNew非true, 则在成功upserted之后并不会返回新插入的对象数据,此时:DbResult.success为true,DbResult.rescode为0,DbResult.result为null
Implementation
@override
Future<DbResult<T>> findAndUpdate<T extends DbBaseModel>(String table, DbFilter filter, DbUpdate update, {DbFindUpdateOptions? findUpdateOptions, required T Function(Map<String, dynamic> map) converter}) async {
if (findUpdateOptions?.$upsert == true && findUpdateOptions?.$returnNew != true) {
logWarn(['findAndUpdate =>', table, 'DbFindUpdateOptions.\$upsert is true but DbFindUpdateOptions.\$returnNew is not true, may cause return null result.']);
}
try {
final result = await _handle.findAndUpdate(table, filter, update, findUpdateOptions: findUpdateOptions, converter: converter);
(result.success ? logDebug : logWarn)(['findAndUpdate =>', table, filter, update, findUpdateOptions, result]);
return result;
} catch (error, stack) {
logError(['findAndUpdate =>', table, filter, update, findUpdateOptions, error, '\n', stack]);
return DbResult(success: false, rescode: -1, message: error.toString());
}
}