Eloquent: shorter WHERE clauses with whereField

There’s one really neat Laravel Eloquent function which, from my experience, a lot of developers don’t know. How do we write WHERE clauses on Eloquent queries?

First option: with three arguments – field, operator, value.

$products = Product::where('category', '=', 3)->get();

Shorter option: we can skip the second parameter, equal sign.

$products = Product::where('category', 3)->get();

But now – even shorter option: did you know you can do THAT?

$products = Product::whereCategory(3)->get();

Yes, exactly, just add your field in CamelCase after the where symbols. Under the hood Laravel engine will transform it into a proper where clause with equal sign.

And if you have a field with more than one “word” and underscore separator, like category_id – transform it into CamelCase:

$products = Product::whereCategoryId(3)->get();

That’s it, simple “trick” but the code is even more readable now, isn’t it?

Like our articles?
Check out our Laravel online courses!

10 COMMENTS

  1. > That’s it, simple “trick” but the code is even more readable now, isn’t it?

    I can’t agree with you. In your opinion – code may be more readable, but the same code isn’t testable. Each call of magic method sounds like problem for unit tests.

  2. Wow. So irritating functionality. Why not add something like that:

    – whereSomeFieldIsGreaterThan(value),
    – whereSomeFieldIsGreaterOrEqualThan(value),
    – whereSomeFieldIsLesserThan(value),
    – whereSomeFieldIsLesserOrEqualThan(value)

    and then parse everything from the method name.

    IMHO it’s completely unnecessary syntactic sugar. Method name is a method name, not some kind of an expression. Maybe it’s a little more readable but only for some fresh junior developer. For regular developer it’s misleading and confusing.

    It’s worth knowing something like this exists but I would strongly advise to avoid it completely.

    (Sorry for my English. I hope it’s understandable)

LEAVE A REPLY

Please enter your comment!
Please enter your name here