DEV Community

loading...
Cover image for Dynamic queries with Laravel

Dynamic queries with Laravel

Rafael França
Originally published at Medium ・1 min read

When developing a project for a client, a doubt arose: how create a dynamic query using only Eloquent?

Maybe, you can think: “It’s easy! We can use the method when”.
But that wasn’t what I intended, therefore, before continue, let me show you better the problem.

Imagine that I have a schedule, and I need create an event that start and finish with a difference of weeks and has a repetition in specific days of week. E.g.:

I, Rafael, intent elevate my English and Spanish level, therefore, intent study English by one hour, in every Sunday, Wednesday and Friday, during a one month; and, Spanish, every Tuesday, Thursday and Saturday.

Now, imagine that you receive the dates using a numeric representation, in that 0 is equals a Monday, and 6 is a Saturday, thus we can represent the received data by the vector below:

{
    "frequency": "daily",
    "days": [1, 3, 5],
    "date_start": "29/05/2020",
    "date_end": "29/06/2020",
    "hour_start": "20:00",
    "hour_end": "21:00"
}

As every people that want to study, not like be interrupted to make another thing, therefore, we need grant this event not collide with another. So, more one time, how make this, using only Eloquent?

The response is simple. See above:

[...]

})->when(request()->get('frequency') === "daily", function (Builder $subquery) {
    foreach (request()->get('days') as $day) {
        $subquery->where('days', 'LIKE', "%$day%");
    }
    return $subquery;
});

[...]

What do you think about the tip?

Soon I back with more! :)

PS: Originally posted on my account on Medium.

Cover photo by Chris Ried on Unsplash.

Discussion (0)