Skip to main content
Quick Tip

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

Enjoyed This Tip?

Get access to all premium tutorials, video and text courses, and exclusive Laravel resources. Join our community of 10,000+ developers.

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.