Get data whereBeetween two coloms

I'm using Laravel 5.5.
I have Table centrals with Model Centrals and table like this

enter image description here

my Controller

    $from = $request->year_from;
    $to   = $request->year_to;
    $month_from = $request->month_from;
    $month_to   = $request->month_to;
    $param = $request->get('parameters_id', []);

    $search = Centrals::whereIn('parameters_id', $param)
    ->where('type', 'Monthly')
    ->where('year', $from)
    ->whereBetween('months_id', [$month_from, $month_to])
    ->orderBy('year')
    ->get();

now how i get data example request:

$request->year_from = 2016;
$request->month_from = 1; /* 1 =Jan*/
$request->year_from = 2018;
$request->month_from = 3; /* 3 =Mar*/

Upvotes: 1

Views: 63

Answers (1)

jedrzej.kurylo
jedrzej.kurylo

Reputation: 40909

The following should do the trick:

$search = Centrals::whereIn('parameters_id', $param)
        ->where('type', 'Monthly')
        ->where(function($q) use ($yearFrom, $monthFrom) {
            $q->where('year', '>', $yearFrom);
            $q->orWhere(function($q2) use ($yearFrom, $monthFrom) {
                $q2->where('year', $yearFrom);
                $q2->where('month', '>=', $monthFrom);
            });
        })
        ->where(function($q) use ($yearTo, $monthTo) {
            $q->where('year', '<', $yearTo);
            $q->orWhere(function($q2) use ($yearTo, $monthTo) {
                $q2->where('year', $yearTo);
                $q2->where('month', '<=', $monthTo);
            });
        })->get();

Upvotes: 1

Related Questions