Chinnu
Chinnu

Reputation: 61

how to write mysql query to laravel eloquent query using below date conditions?

I have a below query in mysql, how to convert into laravel

WHERE (c.start_date >= '" . $params['start_date'] . "' AND c.start_date <= '" . $params['end_date'] . "')
            OR (c.end_date >= '" . $params['start_date'] . "' AND c.end_date <= '" . $params['end_date'] . "')

Upvotes: 1

Views: 56

Answers (3)

William Dias
William Dias

Reputation: 21

$model = Model::where(function($query) use($params){
       $query->where('c.start_date','>=',$params['start_date'])
              ->where('c.start_date','<=',$params['end_date']);
})->orWhere(function($query) use($params){
       $query->where('c.end_date','>=',$params['start_date'])
              ->where('c.end_date','<=',$params['end_date']);
})->first();

Upvotes: 1

VIKAS KATARIYA
VIKAS KATARIYA

Reputation: 6005

Use whereBetween

Model::whereBetween('start_date', [$params['start_date'], $params['end_date'])
      ->whereBetween('end_date', [$params['start_date'], $params['end_date'])
      ->get();

Or

Model::whereBetween('start_date', [$params['start_date'], $params['end_date'])
      ->orWhereBetween('end_date', [$params['start_date'], $params['end_date'])
      ->get();

Upvotes: 1

senty
senty

Reputation: 12847

Something like

Model::whereBetween('start_date', [$params['start_date'], $params['end_date'])
      ->orWhereBetween('end_date', [$params['start_date'], $params['end_date'])
      ->get();

Or:

Model::where('start_date', '>=', $params['start_date'])
     ->where('start_date', '<=', $params['end_date'])
     ->orWhere('end_date', '>=', $params['start_date'])
     ->where('end_date', '<=', $params['end_date'])

Notice that orWhere kind of restarts the query so you start another query after or.

Upvotes: 1

Related Questions