2015-09-23 14 views
5

Giả sử tình huống tiếp theo:Realm java điều kiện truy vấn

//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; 
} 

Giả: Person 1 có chó: NY-trắng-Joe Person 2 có chó: NY-nâu-Mary, SF-trắng-Fluffy, LA-brown-Fluffy Người 3 có chó: NY-brown-Fluffy, LA-white-Pepito

Câu hỏi: Làm cách nào để truy vấn tất cả những người có chó nâu có tên Fluffy?

Những gì tôi đã cố gắng sử dụng các tiềm ẩn VÀ:

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

Sau đó, tôi đã đọc tài liệu và hai equalTo() điều kiện được đánh giá riêng biệt, đó có nghĩa là tôi sẽ có:

Tất cả các người dùng có chó nâu VÀ chó được gọi là Fluffy. (Vậy kết quả là P2, P3).

Tôi nên viết truy vấn này để áp dụng các điều kiện cho cùng một con chó như thế nào?

Trả lời

1

Dường như với tôi cách tiếp cận tốt nhất là sử dụng truy vấn bằng khóa chính. Tôi có nghĩa là đầu tiên thêm khóa chính để Dog lớp:

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

bước Sau đó, người đầu tiên tìm thấy những người dùng có một con chó màu nâu gọi Fluffy, là để tìm chìa khóa chính của một con chó như vậy. Vì vậy, chúng tôi thực hiện một truy vấn để tìm chính xác Dog:

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

Sau đó chúng tôi đang tìm kiếm những người dùng có một con chó với khóa chính được xác định (id lĩnh vực):

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

Cảm ơn câu trả lời, bạn đã chỉ ra rằng câu hỏi của tôi không chính xác, tôi sẽ cập nhật bài đăng của mình, vui lòng kiểm tra lại. Cảm ơn một lần nữa, và xin lỗi. – user1915767

1

Các truy vấn liên kết trong Realm là số lượng tồn tại (https://en.wikipedia.org/wiki/Existential_quantification). Điều đó ngụ ý rằng nếu một điều kiện được thực hiện cho chỉ một đối tượng trong lớp con, đối tượng trong lớp cha được thêm vào RealmResults.

Link query example cho biết cách các số lượng hiện tại sẽ hoạt động. Hiện tại, bạn sẽ phải lặp lại User s và truy vấn danh sách Dogs riêng lẻ.

Có một mở issue về tra cứu ngược lại.

+0

Cảm ơn Kenneth! – user1915767

Các vấn đề liên quan