2015-09-23 2 views
5

は、次のような状況を想定します。レルムjavaクエリー条件

//I don't put the getters and setters, but assume they are there 
public class User extends RealmObject { 
    private RealmList<Dog> dogs; 
} 

public class Dog extends RealmObject { 
    //UPDATE: I've added the variable city, to make my question more exact 
    private String city; 
    private String color; 
    private String name; 
} 

仮定します 人1は犬を持っている:NY - 白 - ジョー 人2は犬を持っている:NY-ブラウン・メアリー、SF-白いふわふわ、 LA-brown-Fluffy 人3には犬がいます:NY-brown-Fluffy、LA-white-Pepito

質問:私は茶色い犬がふわふわしている人をすべて照会できますか?

RealmQuery<User> userQuery = realm.where(User.class).equalTo("dogs.color", "brown").equalTo("dogs.name", "Fluffy"); 

私が持っていることを意味し、そして、私はドキュメントを読んでいると、2 equalTo()条件が別々に評価されています:

すべて私が暗黙のANDを使用してみましたが何

茶色の犬とふわふわと呼ばれる犬を持つユーザー。 (結果はP2、P3です)。

条件を同じ犬に適用するには、このクエリをどのように書きますか?

答えて

1

プライマリキーでクエリを使用するのが最善の方法です。私が最初にDogクラスに主キーを追加することを意味:

class Dog extends RealmObject { 
     @PrimaryKey 
     private int id; 
     private String color; 
     private String name; 
} 

そして、最初のステップは、ふわふわと呼ばれる茶色の犬を持っているユーザーを検索するために、犬の主キーを見つけることです。だから我々は、正確な見つけるためにクエリを作るDog:レルムで

RealmResults<User> users = realm.where(User.class).equalTo("dogs.id", dog.getId()).findAll(); 
+0

お返事ありがとうございます。私の質問は正確ではないことを指摘しました。投稿を更新しますので、もう一度確認してください。もう一度おねがいし、申し訳ありません。 – user1915767

1

リンククエリです:私たちは(IDフィールド)定義された主キーを持つ犬を持っているユーザーを検索している。その後

Dog dog = realm.where(Dog.class).equalTo("color", "brown").equalTo("name", "Fluffy").findFirst(); 

実在限定子(https://en.wikipedia.org/wiki/Existential_quantification)。つまり、子クラスの1つのオブジェクトに対して条件が満たされた場合、親クラスのオブジェクトはRealmResultsに追加されます。

Link query exampleは、存在量限定子がどのように機能するかを示しています。現在、Userを繰り返し、Dogsリストを個別にクエリする必要があります。

逆引きではissueが公開されています。

+0

ありがとうKenneth! – user1915767