Closed cxxxr closed 4 years ago
レコードがone to oneではなくone to manyのときはどうなりますか?
assertionしてone to oneの場合以外はエラーを出すようにするのはどうですか
assertionしてone to oneの場合以外はエラーを出すようにするのはどうですか
one to many の場合は related
のカバー範囲ではないということ?
N+1クエリを解決したいという意図はわかったのだけど、one to manyの場合はサポートしないのはなぜですか? N+1クエリになるのは同じだと思うのですが
includes
のコンセプトと同じだと思うので、まとめられるなら (実装上の不都合がないなら) まとめてしまいたいと思っている。
そもそも上の例だとhogeテーブルのカラム名はidなのにhoge-relationのカラムはhoge-idなので 正しいhoge-relationが作られない問題がありました relatedの指定にカラム名も加えないとだめそうです
(related table-name :key :uuid)
というようにkeyを指定するようにしました
one to manyだとしても多値の一つ目と三つ目のベクタの中の各リストをhogeとhoge-relationのペアとして扱えるので問題ないはずです
includesとまとめるとincludeに指定したテーブル名によって三つ目の返り値が変動して紛らわしいので別ものとして扱うほうがよさそうです
forkしたリポジトリで使って仕様を揉んでから本家に反映させることになったのでclose
というdaoがあるとしてhoge-relationのvalueを見て条件にあったhogeのリストを取得した後、 hogeにhoge-relationのvalueも含めたオブジェクトを作ろうとすると、更にfind-daoしないと hoge-relationのオブジェクトが得られずN+1問題が置きてしまいます。 hogeの中のスロットにhoge-relationがあるとselect-daoにincludesを追加すればいいですが そうでない場合にも同じことが出来るようにrelated節を追加しました。
変更点としてはselect-daoの三つ目の返り値を追加し、ベクタの中にrelatedに指定したクラスの順番に結果が入るようにしました。 ppcre:scan等と同じ形式です。