Reputation: 61
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
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
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
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