deadloop
@deadloop
Активно осваиваю PHP

Как лучше оптимизировать код поиск?

У меня есть код который производит поис в базе по заданным параметрам, я знаю что этот когд можно оптимизиировать, но не могу сообразить как.

Пробовал Query Builder, но доконца с ним не могу разобратся.

public function index(Request $request, Response $response)
    {
        $typeId = $request->get('type');
        $search = $request->get('search');

        if ($typeId && !$search) {

            $element = Element::where('type_id', '=', $typeId)
                ->where('title', 'like', '%' . $search . '%')
                ->get();

            $response->setMessage('Данные успешно загрузил 1');

        } elseif ($typeId && $search) {

            $element = Element::where('type_id', '=', $typeId)
                ->where('title', 'like', '%' . $search . '%')
                ->get();

            $response->setMessage('Данные успешно загрузил 2');

        } elseif (!$typeId || $search) {

            $element = Element::where('title', 'like', '%' . $search . '%')->get();
            $response->setMessage('Данные успешно загрузил 3');

        } elseif ($typeId == null && $search == null){

            $element = Element::get();
            $response->setMessage('Данные успешно загрузил 4');
        }

        $response->setStatus('OK');
        $response->setData(['Element' => $element->load('elementtype')]);

        return $response->asJson();
    }
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
что-то типа такого:
$builder = Element::query();
$loadType = 0;
if ($typeId) {
$builder->where('type_id', $typeId);
$loadType |= 1;
}
if($search) {
$builder->where('title', 'like', "%$search%");
$loadType |= 2;
}

$element = $builder->get();
$response->setMessage("Данные успешно загрузил $loadType");

$response->setStatus('OK');
$response->setData(['Element' => $element->load('elementtype')]);
        return $response->asJson();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы