Есть запрос на Query Builder, который вытягивает информацию с БД.
Пример:
public function getFoodTypesListByCountObject($countryId = false, $cityId = false, $regionId = false, $dateFrom = false, $dateTo = false, $person = false)
{
$objectsFoodTypes = DB::table('food_types AS ft')
->select('ft.id', 'ft.name', DB::raw('count(DISTINCT o.id) as countObject'))
->join('objects AS o', 'ft.id', '=', 'o.foodTypesId')
->join('rooms AS r', 'o.id', '=', 'r.objectId')
->where([
['o.countryId', '=', $countryId],
['o.cityId', '=', $cityId],
['o.regionId', '=', $regionId],
['o.person', '=', $person],
])
->groupBy('ft.id')
->get();
return $objectsFoodTypes;
}
Из реквеста приходят параметры, от которых зависит вывод информации на страничке. Не могу разобраться как в Laravel исключать параметр из массива where([['o.person', '=', $person]]) , если например вместо значения параметра $person пришел false.
В сыром запросе можно делать все так:
public function getListObjects($countryId, $cityId = false, $regionId = false, $dateFrom = false, $dateTo = false, $person = false) {
$sql = "SELECT *
FROM objects AS o
JOIN cities AS c ON o.`cityId` = c.`id`
WHERE
o.`valuePercent` = 50 ".
(($countryId) ? " AND c.countryId = " . $countryId : "") .
(($cityId) ? " AND c.id = " . $cityId : "") .
(($regionId) ? " AND c.regionId = " . $regionId : "") .
(($person) ? " AND r.amountPerson = " . $person : "") .
AND (o.price > 0 AND o.price <=2000)
GROUP BY o.id";
$objects = DB::select($sql);
return $objects;
}
Подскажите как средствами Laravel подобное, на примере первого запроса?