hasmany(またはmany2many)のアソシエーション先で検索
解決策を見つけることができなかったので愚痴メモしておきます。
文章のみの説明で具体的なコードが出せなくてすみません。
例えばUser has many CreditCardsのような関係で、userId=1がCreditCardId=[1,2,3]を持っている場合、
user.creditCards に CreditCardが3つスライスで入ってるみたいになるかと思います。
この時アソシエーション先に複数の値で検索、つまりCreditCardId=1か2を持っているUsersから探すとすると
select * FROM users INNER JOIN ~~ WHERE cards.id IN (1,2)
みたいな操作をgormで書くことになり、userId=1に対してcreditCardId=1とJOINしたレコードとcreditCardId=2とJOINしたレコードの2レコード分が取得されます。
同じuserオブジェクト(struct)が複数存在すると扱いにくいので、同じuserIdについては内部で自動的にまとめてくれる方法があるはずだと思ったのですが、その方法を見つけることができませんでした。
ドキュメントの奥深くのスルーしてる部分に答えが眠ってるのかもしれませんが、力尽きてしまいました。
以前使用していた他言語のORMではこういう状況で違和感なく使えていたはずなのでえ?え?となった次第です。
対応としては取得した後で重複を解消するコードをかませることになりそうです。