Ich habe zwei ModellklasseSwift 3 Benötigen Auf Realm Abfrage Hilfe
class EntryModel: Object {
dynamic var id: Int = 0
dynamic var type: String = ""
dynamic var tap: Int = 0
dynamic var title: String = ""
dynamic var notes: String = ""
dynamic var startTime: Date? = nil
dynamic var endTime: Date? = nil
dynamic var amount1: Int = 0
dynamic var amount2: Int = 0
dynamic var meal: String = ""
dynamic var foodDetails: String = ""
dynamic var isAlarm: Bool = false
dynamic var timeOfAlarm: Date? = nil
//dynamic var lastFeedTime: Date? = nil // optionals supported
override static func primaryKey() -> String? {
return "id"
}
}
und
class EntryModelList: Object {
dynamic var id: Int = 0
dynamic var babyId: Int = 0
dynamic var date: Date? = nil
var entryModel = List<EntryModel>()
//dynamic var lastFeedTime: Date? = nil // optionals supported
override static func primaryKey() -> String? {
return "id"
}
}
: Ich bin in Reich, damit ich weiß nicht viel über sie. Ich möchte eine Abfrage, die mich zurückgibt, indem ich mit babyId der EntryModelList und dem Typ von EntryModel filtere. Das wird nur diese Liste übereinstimmen, die ich möchte.
Ich habe versucht, mit
let predicate = NSPredicate(format: "babyId == \(babyId) AND ANY entryModel.type IN %@", filterArray)
let entryModelList = try! Realm().objects(EntryModelList.self).filter(predicate).sorted(byKeyPath: "date", ascending: false)
Prädikat Ausgang:
babyId == 1 AND ANY entryModelList.type IN {"breast", "bottle"}
Ausgang:
Results<EntryModelList> (
[0] EntryModelList {
id = 2;
babyId = 1;
date = 2017-02-16 18:00:00 +0000;
entryModelList = RLMArray <0x6100000ff480> (
[0] EntryModel {
id = 8;
type = diaper;
tap = 1;
title = ;
notes = ;
startTime = 2017-02-17 11:26:36 +0000;
endTime = (null);
amount1 = 0;
amount2 = 0;
meal = ;
foodDetails = ;
isAlarm = 0;
timeOfAlarm = (null);
},
[1] EntryModel {
id = 10;
type = bottle;
tap = 1;
title = ;
notes = Fgdg;
startTime = 2017-02-16 23:44:22 +0000;
endTime = (null);
amount1 = 15;
amount2 = 0;
meal = ;
foodDetails = ;
isAlarm = 0;
timeOfAlarm = (null);
}
);
},
[1] EntryModelList {
id = 1;
babyId = 1;
date = 2017-02-14 18:00:00 +0000;
entryModelList = RLMArray <0x6100000fd680> (
[0] EntryModel {
id = 1;
type = breast;
tap = 0;
title = ;
notes = ;'l'k,;
startTime = 2017-02-14 23:15:49 +0000;
endTime = (null);
amount1 = 100;
amount2 = 0;
meal = ;
foodDetails = ;
isAlarm = 0;
timeOfAlarm = (null);
},
[1] EntryModel {
id = 4;
type = bottle;
tap = 0;
title = ;
notes = Jhkhjkhjk;
startTime = 2017-02-15 01:17:47 +0000;
endTime = (null);
amount1 = 100;
amount2 = 0;
meal = ;
foodDetails = ;
isAlarm = 0;
timeOfAlarm = (null);
},
[2] EntryModel {
id = 7;
type = breast;
tap = 0;
title = ;
notes = ;
startTime = 2017-02-15 11:43:08 +0000;
endTime = (null);
amount1 = 100;
amount2 = 0;
meal = ;
foodDetails = ;
isAlarm = 0;
timeOfAlarm = (null);
}
);
}
)
aber das ist nicht das, was ich will. Ich möchte wissen, wie ich nur die Datenliste bekommen werde, wo EntryModel.type "Brust" oder "Flasche" Typ ist.
Danke.
Können Sie einige Beispiele liefern Daten zeigen, was Sie Ihre Abfrage im Vergleich zu dem, was es tatsächlich übereinstimmt übereinstimmen soll? Aus Ihrer Beschreibung ist schwer zu verstehen, was die Abfrage anders machen soll. – bdash
@bdash Ich habe meine Frage aktualisiert und bitte lassen Sie mich wissen, dass Sie meine Frage verstehen können oder nicht. Mein Englisch ist nicht so gut. Wenn du mir eine Lösung geben kannst, werde ich dir gegenüber demütig sein. Danke – Jihan
Willst du mit einem 'Results 'enden, in dem jede' EntryModelList' -Eigenschaft' EntryModelList' gefiltert ist, so dass sie nur Objekte mit der entsprechenden 'type' Eigenschaft enthält? –
bdash