如何使用 'DBAccess' iOS ORM 执行事件触发操作
How do I perform event trigger operations with 'DBAccess' iOS ORM
我在 Xcode 7.1.1.
中使用 DBAccess 框架 v1.6.12
我想在插入、更新或删除像这样的行时使用事件触发器:
- 现有特定时期数据的'longest'参数变为'NO'。
- 找到最长的行 'text'。
- 将其行的 'longest' 参数更改为 'YES'。
代码图片:
@interface NoteModel : DBObject
@property uint32_t dateYMD; // not unique
@property BOOL longest; // default value is NO
@property NSString *text;
@end
- (void)test {
NoteModel *obj = [NoteModel new];
obj.dateYMD = 20151201;
obj.text = @"hoge";
[obj commit]; //< HERE I want to fire the event trigger
}
DBObject#entityWillInsert 只是 return BOOL 值,没有更改信息。
要根据需要拦截事件,您可以使用以下方法:
- (BOOL)entityWillInsert;
- (BOOL)entityWillUpdate;
- (BOOL)entityWillDelete;
- (void)entityDidInsert;
- (void)entityDidUpdate;
- (void)entityDidDelete;
从你的例子来看,虽然我可能不太清楚你在问什么,但我会使用 entityWillInsert/Update 方法来查询可能更长的其他对象,然后你可以更新 最长相应标记。
在半伪代码中,它看起来像这样:
- (BOOL)entityWillInsert {
// see if we have any existing records with a longer text field
self.longest = [[[NoteModel query] whereWithFormat:@"length(text) > length(%@)", self.text] count] ? NO:YES;
// now if this is to be the longest then we will need to ensure that the current record is updated too.
if(self.longest) {
for (NoteModel* r in [[[NoteModel query] where:@"longest = 1"] fetch]) {
r.longest = NO;
[r commit];
}
}
// you must return yes to ensure the ORM knows to complete the action
return YES;
}
我在 Xcode 7.1.1.
中使用 DBAccess 框架 v1.6.12我想在插入、更新或删除像这样的行时使用事件触发器:
- 现有特定时期数据的'longest'参数变为'NO'。
- 找到最长的行 'text'。
- 将其行的 'longest' 参数更改为 'YES'。
代码图片:
@interface NoteModel : DBObject
@property uint32_t dateYMD; // not unique
@property BOOL longest; // default value is NO
@property NSString *text;
@end
- (void)test {
NoteModel *obj = [NoteModel new];
obj.dateYMD = 20151201;
obj.text = @"hoge";
[obj commit]; //< HERE I want to fire the event trigger
}
DBObject#entityWillInsert 只是 return BOOL 值,没有更改信息。
要根据需要拦截事件,您可以使用以下方法:
- (BOOL)entityWillInsert;
- (BOOL)entityWillUpdate;
- (BOOL)entityWillDelete;
- (void)entityDidInsert;
- (void)entityDidUpdate;
- (void)entityDidDelete;
从你的例子来看,虽然我可能不太清楚你在问什么,但我会使用 entityWillInsert/Update 方法来查询可能更长的其他对象,然后你可以更新 最长相应标记。
在半伪代码中,它看起来像这样:
- (BOOL)entityWillInsert {
// see if we have any existing records with a longer text field
self.longest = [[[NoteModel query] whereWithFormat:@"length(text) > length(%@)", self.text] count] ? NO:YES;
// now if this is to be the longest then we will need to ensure that the current record is updated too.
if(self.longest) {
for (NoteModel* r in [[[NoteModel query] where:@"longest = 1"] fetch]) {
r.longest = NO;
[r commit];
}
}
// you must return yes to ensure the ORM knows to complete the action
return YES;
}