Avoid data leakage when using orWhere on a relationship

$user->posts()
->where('active', 1)
->orWhere('votes', '>=', 100)
->get();

Returns: ALL posts where votes are greater than or equal to 100 are returned

select * from posts where user_id = ? and active = 1 or votes >= 100
use Illuminate\Database\Eloquent\Builder;
 
$users->posts()
->where(function (Builder $query) {
return $query->where('active', 1)
->orWhere('votes', '>=', 100);
})
->get();

Returns: Users posts where votes are greater than or equal to 100 are returned

select * from posts where user_id = ? and (active = 1 or votes >= 100)

Tip given by @BonnickJosh

Like our articles?

Become a Premium Member for $129/year or $29/month
What else you will get:
  • 59 courses (1057 lessons, total 42 h 44 min)
  • 79 long-form tutorials (one new every week)
  • access to project repositories
  • access to private Discord

Recent Premium Tutorials