[Laravel]Eloquentで条件をネストする方法

Larval

LaravelのEloquentはパフォーマンス的には微妙らしいですが
いろいろと便利な部分もあって使っている割合の方が多いのではないでしょうか。

Eloquentに触れ始めたばかりの人が良く悩むところを解決していきましょう

次のようなケースでお困りの方が対象

Eloquentを使いたいけど、↓こんな条件を組まなければならない

...
WHERE (A OR B)
  AND C

さて、どうしよう?( ;∀;)ってなってる方

How to

↓この形で実現できます

->where(function ($nestWhere) {
  return $nestWhere->where(A)
    ->orWhere(B);
})->where(C);

ちょこっと解説

↑のコードを見て頂ければ、「あぁそうなるんだ」って思う方も多いかと思いますが

->where(function ($nestWhere) { // これが (A OR B) の括弧だと思ってください nestWhere の変数名はなんでもOK
  return $nestWhere->where(A)   // A    の部分になります
    ->orWhere(B);               // OR B の部分になります
});

->where(C)はそのまんまですね

如何でしょうか
よく躓くポイントでありながら、意外と情報が転がってないので
検索しても答えが見つからないという方の役に立てれば嬉しいです