Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Laravel запрос в БД, Запрос в БД в Laravel
Snnick  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 42681
На форуме: 1 год, 4 месяца, 7 дней
Карма:




Всем привет. Осваиваю Laravel и столкнулся с следующей проблемой.
Есть запрос на 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 подобное, на примере первого запроса?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snnick  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 42681
На форуме: 1 год, 4 месяца, 7 дней
Карма:




Нашел решение:

$query = 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');
if ($person) {
$query->where('o.person', $person);
}
$objectsFoodTypes = $query->groupBy('ft.id')->get();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса