Wrong way - easy to make mistake
Let's say we need to filter male customers aged 18+ or female customers aged 65+ (whatever the reason is, it's just a hypothetical example). Simple MySQL query would look something like this:... WHERE (gender = 'Male' and age >= 18) or (gender = 'Female' and age >= 65)
// ... $q->where('gender', 'Male'); $q->orWhere('age', '>=', 18); $q->where('gender', 'Female'); $q->orWhere('age', '>=', 65);
... WHERE gender = 'Male' and age >= 18 or gender = 'Female' and age >= 65
... WHERE ((gender = 'Male' and age >= 18) or gender = 'Female') and age >= 65
Want more articles like this every week? Subscribe!
Right way - putting "brackets" into Eloquent
What we actually need here is a thing called Advanced Where Clauses - where we can assign a function to a where clause, like this:// ... $q->where(function ($query) { $query->where('gender', 'Male') ->where('age', '>=', 18); })->orWhere(function($query) { $query->where('gender', 'Female') ->where('age', '>=', 65); })
No comments or questions yet...