困ったこと
entでOR句を発行する際に、OR句の中でAND句を使用したかったのですが、中々実装できずに困ったので記事にしました。
実装方法
entはWhere句をつなげる際に,引数に入れることでAND句を繋げていくことができます。
なので、OR句の中でANDの引数の中に,を入れることで対象のSQLを発行することができます。
client.Pet.
Query().
Where(
pet.Or(
pet.And(
pet.HasOwner(),
pet.DeletedAtIsNil(),
pet.Not(pet.HasFriends())
)
).
All(ctx)
余談ですが、Andを使用しなくてもWhere内部でカンマで区切ればAND繋ぎになります。
client.Pet.
Query().
Where(
pet.HasOwner(),
pet.DeletedAtIsNil()).
All(ctx)
感想
entはまだまだ参考できるサイトが少ないので、結構詰まってしまいました。
また、Railsに慣れていたのもあってメソッドチェーン的にできるのかなぁ?と思っていたので引数で渡していくのも驚きでした。
ただ、メソッドチェーンの場合は戻り値とか気にしないといけないですが、引数の場合は気にしなくて良いのでこちらの方がミスとか少ないんだろうなぁとか思ったりしています。