Почему запрос Laravel не выбирает правильные данные? - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь получить записи, имеющие режимы easy и advanced, но он возвращает только easy записи каждый раз.т.е. те записи, для которых установлен режим easy.

Строка запроса: mywebsite.com/game?easy=easy&advanced=advanced

public function index(Request $request) {

    if($request->has('easy') {
        return GameMode::where('mode', $request->easy)->get();
    }

    if($request->has('advanced') {
        return GameMode::where('mode', $request->advanced)->get();
    }

    return GameMode::all();
}

Ответы [ 5 ]

0 голосов
/ 02 марта 2019

В этих сценариях я пытаюсь использовать функции scope*GameMode.php модель

...
public function scopeEasyMode($q, $easy) 
{
    if (!empty($easy)) { return $q->orWhere('mode', $easy); }
}

public function scopeAdvanceMode($q, $adv) 
{
    if (!empty($adv)) { return $q->orWhere('mode', $adv); }
}
...

В вашем контроллере GameModeController.php

...
$results = GameMode::easyMode($request->easy)->advanceMode($request->advance)->get();
...

Это отфильтрует ваши необходимые режимы или все Обновление: вместо того, чтобы передавать каталог значений этим scope* методам, лучше сначала отфильтровать / проверить значения, которые менее подвержены ошибкам.

0 голосов
/ 01 марта 2019

попробуйте использовать when метод здесь

return GameMode::when($request->easy,function($q,$request) {
             return $q->where('mode', $request->easy);
       })->when($request->advanced,function($q,$request) {
             return $q->orWhere('mode', $request->advanced);
       })->get();
0 голосов
/ 01 марта 2019

Вы возвращаете запрос с установленным режимом easy сразу, если он установлен.Что вы можете сделать, это построить свой запрос на основе вашего запроса, как это:

public function index(Request $request)
{
    $query = GameMode::query();

    if ($request->has('easy')) {
        $query->where('mode', $request->easy);
    }

    if ($request->has('advanced')) {
        $query->orWhere('mode', $request->advanced);
    }

    return $query->get();
}
0 голосов
/ 01 марта 2019

Это означает, что вам нужно создать пустой запрос, а затем построить его на основе входных данных:

public function index(Request $request) {

    $query = GameMode::query();
    if($request->has('easy') {
        $query->where('mode', $request->easy);
    }

    if($request->has('advanced') {
        $query->orWhere('mode', $request->advanced);
    }

    return $query->get();
}

Подробнее см. в этой статье .

0 голосов
/ 01 марта 2019

Решение 1:

public function index(Request $request) {
    if($request->only('easy','advanced')) {
        return GameMode::whereIn('mode', $request->only('easy','advanced'))->get();
    }

    return GameMode::all();
}

Решение 2:

public function index(Request $request) {

    if($request->has('easy') && $request->has('advanced')) {
        return GameMode::whereIn('mode', [$request->easy, $request->advanced])->get();
    }

    if($request->has('mode')) {
        return GameMode::where('mode', $request->easy)->get();
    }

    if($request->has('advanced')) {
        return GameMode::where('mode', $request->advanced)->get();
    }

    return GameMode::all();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...