-->

2020年5月2日土曜日

モデルが持つ配列内を検索し、条件に該当するモデルを取得する

モデルが持つ配列内を検索し、条件に該当するモデルを取得する
モデルデータ
  1. //レシピモデル
  2. class Recipe: Object {
  3. @objc dynamic var name = ""
  4. @objc dynamic var category = ""
  5. @objc dynamic var country = ""
  6. @objc dynamic var season = ""
  7. let ingredients = List() //レシピと材料は1対多の関係
  8. override static func primaryKey() -> String? {
  9. return "name"
  10. }
  11. }
  12. //材料モデル
  13. class Ingredient: Object {
  14. @objc dynamic var name = ""
  15. let recipes = LinkingObjects(fromType: Recipe.self, property: "ingredients")
  16. }

モデルデータの格納、検索、表示
  1. do {
  2. //トマトパスタ、カツ丼、カレーの3つのレシピのモデルを作成
  3. let realm = try Realm()
  4. let dictionary1: [String: Any] =
  5. ["name": "トマトパスタ",
  6. "category": "パスタ",
  7. "country" : "イタリア",
  8. "season" : "春",
  9. "ingredients":[["name": "トマト"],["name": "にんにく"]]
  10. ]
  11.  
  12. let dictionary2: [String: Any] =
  13. ["name": "カツ丼",
  14. "category": "丼",
  15. "country" : "日本",
  16. "season" : "夏",
  17. "ingredients":[["name": "たまねぎ"],["name": "卵"]]
  18. ]
  19. let dictionary3: [String: Any] =
  20. ["name": "カレー",
  21. "category": "カレー",
  22. "country" : "日本",
  23. "season" : "夏",
  24. "ingredients":[["name": "たまねぎ"],["name": "にんじん"],["name":"じゃがいも"]]
  25. ]
  26. let recipe1 = Recipe(value: dictionary1)
  27. let recipe2 = Recipe(value: dictionary2)
  28. let recipe3 = Recipe(value: dictionary3)
  29. try! realm.write {
  30. realm.deleteAll() //既に保存済のモデルを一旦削除
  31. realm.add(recipe1)//レシピモデルの保存
  32. realm.add(recipe2)//レシピモデルの保存
  33. realm.add(recipe3)//レシピモデルの保存
  34.  
  35. //材料にたまねぎを使用するレシピモデルを取得する
  36. var objects: Results<Recipe>
  37. objects = realm.objects(Recipe.self).filter("SUBQUERY(ingredients, $ingredient, $ingredient.name = %@).@count >= 1","たまねぎ")
  38. print("objectsの中",objects)
  39. }
  40. } catch {
  41. print("エラー")
  42. }

出力結果
objectsの中 Results <0x10461f0e0> (
 [0] Recipe {
  name = カツ丼;
  category = 丼;
  country = 日本;
  season = 夏;
  ingredients = List <0x280756760> (
   [0] Ingredient {
    name = たまねぎ;
   },
   [1] Ingredient {
    name = 卵;
   }
  );
 },
 [1] Recipe {
  name = カレー;
  category = カレー;
  country = 日本;
  season = 夏;
  ingredients = List <0x280756880> (
   [0] Ingredient {
    name = たまねぎ;
   },
   [1] Ingredient {
    name = にんじん;
   },
   [2] Ingredient {
    name = じゃがいも;
   }
  );
 }
)

0 件のコメント:

コメントを投稿