Привет, може ли едно рамо с Laravel query. Нещо не ми се получават нещата по ларавелския начин, ако някой може да хвърли едно око, защото query-то ми се вижда legit, но не работи както трябва.
Идеята е search с optimal parameters. Търсене по title и description работи коректно, тоест вади резултати, но real case : потребителя решава да търси keyword в различна категория или да филтрира цена / друга категория/ тип и т.н.. -> какво трябва да се случва тогава -> да не показва резултата от намерените Ads по title / description.
Приемете, че данните идват от request и са валидни id-та.
Другият, вариант, който си е Laravel Way, с релациите, е този, който също не работи коректно, намира обяви по title/ description, и ги показва, дори когато е зададена друга категория
Третият ми вариант е с Filters, което май ми се вижда най-удачно, накрая май натам ще се ориентирам, ако не успея да подкарам това нещо. Четвърти вариант е с if проверки какво има в $request-a, но ще стане мноого грозно с доста проверки и не ми се иска да е така.
Къде изпускам и какво? Thanks. In the end - ако обявата е намерена по title/ description - винаги я показва, нищо че е зададен друг град, категория, цена и тип. <= това е грешното поведение
Идеята е search с optimal parameters. Търсене по title и description работи коректно, тоест вади резултати, но real case : потребителя решава да търси keyword в различна категория или да филтрира цена / друга категория/ тип и т.н.. -> какво трябва да се случва тогава -> да не показва резултата от намерените Ads по title / description.
Приемете, че данните идват от request и са валидни id-та.
PHP:
$result = Ad::when($keyword, function ($q) use ($keyword) {
return $q->where('title', 'like', '%' . $keyword . '%')->orWhere('description', 'like', '%' . $keyword . '%');
})
->when($category_id, function ($q) use ($category_id) {
return $q->where('category_id', $category_id);
})
->when($region_id, function ($q) use ($region_id) {
return $q->where('region_id', '=', $region_id);
})
->when($type_id, function ($q) use ($type_id) {
return $q->where('adtype_id', '=', $type_id);
})
->when($min_price, function ($q) use ($min_price) {
return $q->where('price', '>=', $min_price);
})
->when($max_price, function ($q) use ($max_price) {
return $q->where('price', '<=', $max_price);
})
->paginate(8);
Другият, вариант, който си е Laravel Way, с релациите, е този, който също не работи коректно, намира обяви по title/ description, и ги показва, дори когато е зададена друга категория
PHP:
$result = Ad::when($keyword, function ($q) use ($keyword) {
return $q->where('title', 'like', '%' . $keyword . '%')->orWhere('description', 'like', '%' . $keyword . '%');
})
->whereHas('category', function ($q) use ($category_id) {
return $q->where('category_id', $category_id);
})
->whereHas('region', function ($q) use ($region_id) {
return $q->where('region_id', $region_id);
})
->whereHas('type', function ($q) use ($type_id) {
return $q->where('adtype_id', $type_id);
})
->where('price', '>=', $min_price)
->where('price', '<=', $max_price)
->paginate(8);
return view('search.index', compact('result'));
}
Третият ми вариант е с Filters, което май ми се вижда най-удачно, накрая май натам ще се ориентирам, ако не успея да подкарам това нещо. Четвърти вариант е с if проверки какво има в $request-a, но ще стане мноого грозно с доста проверки и не ми се иска да е така.
Къде изпускам и какво? Thanks. In the end - ако обявата е намерена по title/ description - винаги я показва, нищо че е зададен друг град, категория, цена и тип. <= това е грешното поведение
Последно редактирано: