2017-05-09 13 views
1

子テーブルから親テーブルのフィールドにアクセスしたいとします。レルムデータベースの双方向リンク

public class Product extends RealmObject { 

    @SerializedName("location") 
    private String locationInStore; 

    @SerializedName("tags") 
    private RealmList<Tag> productTags; 
} 

public class Tag extends RealmObject { 

    @PrimaryKey 
    private String name; 
    } 
} 

今私は、タグテーブル内の名前を検索しなければならないし、私はそのタグの検索と位置を一致した名前を表示する必要があります。

RealmResults<Tag> name = mRealm.where(Tag.class).contains("name", tag, Case.INSENSITIVE).findAll(); 

しかし、これによってタグ名のみが表示されます。どのようにしてその場所や他のプロパティにアクセスできますか?

私はまた、製品のオブジェクトが、この製品のオブジェクトは、タグ配列でない検索に一致したものを含んで私を返すクエリの上

List<RealmResults<Product>> results = new ArrayList<>(); 

results.add(mRealm.where(Product.class).contains("productTags.name", tag, Case.INSENSITIVE).findAll()); 

を試してみました。事前

+0

'一覧>結果についての詳細を読みます= new ArrayList <>(); 'しかし、なぜですか? – EpicPandaForce

+0

@EpicPandaForce私の完全なクエリは results.add(mRealm.where(Product.class).equalTo(" productTags.name "、tag、Case.INSENSITIVE).findAllです。 ());( "productTags.name"、tag、Case.INSENSITIVE).findAll())このタグの値は、次のようになります。 ; ( "productTags.name"、タグ、Case.INSENSITIVE).notEqualTo( "productTags.name"、タグ、Case.INSENSITIVE).With( "productTags.name"、tag、Case.INSENSITIVE) "productTags.name"、tag、Case.INSENSITIVE).findAll()); – swati

+0

あなたの質問は私を混乱させます。あなたはProduct * - > 1 Tagを持っています。つまり、その場所を持つ製品は、複数のタグに関連付けられる可能性があります。あなたが何をしていても、商品を選択すると、いくつかの異なる名前を持つタグに関連付けられている可能性があります。表示するクエリは、少なくとも1つのタグを持つすべての商品を返します。タグの名前は「タグ」です。それは検索に一致するものです。他のタグにも関連付けられ、これらのタグには異なる名前が付いている可能性が高いようです。 –

答えて

0

おかげで、アレイのない1がノー検索にマッチしている理由の主なアイデアは、Case.INSENSITIVE検索です。使用して気をつけてください。この機能の制限があるので:

はソートをし、大文字小文字を区別しない文字列は、唯一の「ラテン語基本」内の文字セットでサポートされているクエリで「ラテンサプリメント」、「ラテン拡張A」、「拡張ラテン語と一致しましたB '(UTF-8範囲0-591)。さらに、ソートは、標準ライブラリとは異なり、大文字と非大文字を並べ替えるように行われます。これはつまり、Realmの実際のソート順です。さらに、equalTo()、notEqualTo()を使用している場合、クエリーで大文字と小文字を区別しないフラグを設定することにより、 ' - ! "#0 & ()、英語のみのロケールからの文字上で動作します()、endsWith()、beginsWith()など()が含まれています。

これらの制限here