最近、React Nativeを勉強し始めて、Realmというデータの永続化方法を知ったのですが、
なんせズブの素人のため、単純に検索クエリ発行するのにも手間取る始末。。
今回はその中で最初につまづいたfilteredで変数扱う方法です。
Realmの取っ掛かりには以下のサイトを参考にさせていただきました。感謝感謝。
http://www.workabroad.jp/posts/2201
で、早速答えとしては、
realm.objects('Dog').filtered("id == $0", id);
こんな感じです。
複数指定したい場合は、
realm.objects('Dog').filtered("id == $0 AND subid == $1", 0, 1);
こんな感じでいけました。
$0,$1…$Nで動的に設定したい値を続けて、セットしたい値を先頭から順にカンマで繋いでいきます。
そもそも何故、ハマったかというと、やり方を調べていて、Realm公式の
https://realm.io/docs/javascript/2.2.0/#filtering
を見てたんですが、単純に途中で間違って、JavaScriptではなく、Swiftの手順を追ってしまったという、ね!笑
なんとも間抜けな話ですが、Swiftだと
realm.objects('Dog').filtered("id == %@", id);
こんな感じ。
で、Pythonなんかだと、文字列置換するのに、 %sとか使うので、ついついな〜るほど、って勘違いしちゃって、、
で、当然、%@: Invalid predicate.って怒られたわけです。笑
さらに、まだ性懲りも無くSwiftの説明内を追っちゃったものだから、
NSPredicate()とか試したり、filteredじゃなく、filterなのか?とか。
ま、もちろんどれもエラーになるわけですが。。
で、調べていた公式サイトをよく見たら、対象言語が違っていた、というオチでした、はい。
ということで、Realmのfilterを動的にする話と凡ミスの話でした。