2017-08-17 10 views
0

レルムを使用して、私は2つのオブジェクトを設定しました:UserQuestionです。ピボットテーブルの関係でレルムをフィルタリングする

、各ユーザが質問に答えて、これはそのような第三の目的に格納されています。私がする必要がどのような

class Answer : Object { 
    dynamic var user: User? 
    dynamic var question: Question? 
    dynamic var answerText = "" 
} 

、関連する回答オブジェクトを取得し、ユーザーオブジェクトおよび質問オブジェクトを与えています。以下のような半SQLで擬似コード何か:

SELECT FROM Answers WHERE user = User and question = Question 

 

だから... ...どのように私はこれを達成していますか?

 


 

ボーナスポイント質問オブジェクトを取得し、代わりにそのオブジェクトの主キーを使用する必要がないの方法がある場合には(私は、ユーザーオブジェクトを持っていますが、唯一の質問ID、質問のオブジェクトを最初に解決する必要があります)ので、何かのように:

SELECT FROM Answers WHERE user = User and question.id = Question.id 

また、レルムはオブジェクトが必要になるまでオブジェクト全体をメモリにロードしませんが、それは可能とは思いません。

注:少し問題を単純化しました。一次回答IDがないのは正当な理由があるため、追加するように教えてください。

答えて

3

UserモデルをAnswerと逆の関係にするように変更する必要があります。これには、userが現在のユーザーと等しいすべての回答が自動的に含まれます。

次に、ユーザーにクエリを行い、answersプロパティにアクセスし、質問に基づいてフィルタリングする必要があります。

UserQuestionクラスが異なる可能性があるので、私はクエリをテストできるようにこれらのスケルトンクラスを作成しました。したがって、正確なクラス定義に合わせてprimaryKeyとquestionフィルタを変更してください。

class User: Object { 
    let answers = LinkingObjects(fromType: Answer.self, property: "user") 
    dynamic var userName = "" 
    override class func primaryKey()->String { 
     return "userName" 
    } 
} 

class Answer : Object { 
    dynamic var user: User? 
    dynamic var question: Question? 
    dynamic var answerText = "" 
} 

class Question: Object { 
    dynamic var title = "" 
} 

let questionId = "" 
let questions = realm.object(ofType: User.self, forPrimaryKey: "userName")?.answers.filter("question.id = %@",questionId) 
+1

おかげダビデは、私はそう簡単な 'user.id'など関連プロパティをフィルタ処理でき気づいていなかった!、あなたの答えは、テストアプリケーションを作成するために私を導いたと私は' realm.objectsを行うことができました(Answer.self).filter( "user.id =%@ AND question.id =%@"、1、7) 'と入力します。ご協力いただきありがとうございます – TRG

関連する問題