У меня есть два класса моделиSwift 3 Нужна помощь по Realm Query
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"
}
}
и
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"
}
}
Я новичок в области, так что я не знаю много о нем. Я хочу запрос, который вернет меня, фильтруя с помощью babyId из EntryModelList и типа EntryModel. Это будет соответствовать только этому списку, который я хочу.
Я попытался с
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)
выход сказуемого:
babyId == 1 AND ANY entryModelList.type IN {"breast", "bottle"}
Выход:
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);
}
);
}
)
, но это не то, что я хочу. Я хочу знать, как я получу только те списки данных, где EntryModel.type - тип «грудь» или «бутылка».
Спасибо.
Можете ли вы предоставить некоторые примеры данные, показывающие, что вы хотите, чтобы ваш запрос соответствовал тому, что он на самом деле соответствует? Трудно понять из вашего описания, что именно вы хотите, чтобы запрос работал по-другому. – bdash
@bdash Я обновил свой вопрос и, пожалуйста, дайте мне знать, что вы можете понять мой вопрос или нет. Мой английский не так хорош. Если вы можете дать мне решение, я буду вам смирен. Спасибо – Jihan
Является ли ваше намерение закончить с помощью «Результаты», где каждый из них содержит свойство entryModelList' EntryModelList', фильтруется, поэтому он содержит только объекты с соответствующим свойством 'type'? –
bdash