Я хочу проверить, что моя команда sql содержит введенные данные или нет - PullRequest
1 голос
/ 27 марта 2019

У меня есть два раунда «первый и нокаут». Только 4 команды могут пойти в нокаут-раунд, если они получили наивысшее очко в первом раунде.Теперь, во-первых, я хочу выбрать эти 4 команды из первого раунда, а затем проверить, входит ли введенная команда в выбранные 4 команды или нет.Взгляните на мой код (пока я пробовал) [На этом изображении две команды помечены как исключающие, но когда я даю условие, они не исключают эти две команды]

enter image description here

$matches= new Match();
$matches->team1 = $request->input('team1');
$matches->team2 = $request->input('team2');

$ko =  DB::select('SELECT * FROM points WHERE round="first" ORDER BY points DESC , run_rate DESC LIMIT 4');

if($ko == $matches->team1 || $ko == $matches->team2) {
    $matches->round = "ko";
} else {
   $matches->round = "first";   
}

Снимок экрана $kos после обновления.enter image description here

1 Ответ

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

Прежде всего, $ko не содержит результатов запроса, пока вы не передадите ему закрытие, в этом случае ->first().

$ko =  DB::select('SELECT * FROM points WHERE round="first" ORDER BY points DESC , run_rate DESC LIMIT 4')->first();

Далее необходимо сравнить значениеот $ko->team до $matches->team1 или $matches->team2:

if($ko->team == $matches->team1 || $ko->team == $matches->team2) {
  ...
}

Наконец, некоторые убираются.Запрос БД можно упростить, используя синтаксис Eloquent вместо необработанного SELECT:

$ko = DB::table("points")
->where("round", "=", "first")
->orderBy("points", "DESC")
->orderBy("run_rate", "DESC")
// ->limit(4) // Removing this; incompatible with `->first()`
->first();

Есть еще одна логическая ошибка;если вам нужно limit(4), то вы не можете использовать ->first(), вам нужно будет использовать ->get(), который затем создает Collection, который нельзя сравнить с $matches, если вы не выполните цикл:

$kos = DB::table("points")...->get();

$matches->round = "first";
foreach($kos AS $ko){
    if($ko->team == $matches->team1 || $ko->team == $matches->team2) {
        $matches->round = "ko";
        break;
    }
}

В общем, вам необходимо пересмотреть то, что вы пытаетесь сделать, и прочитать синтаксис Eloquent, как выполнять запросы и возвращать результаты, как выполнять циклы, получать доступ к свойствам и сравнивать эти результаты.и т. д.

Редактировать: Поскольку вы выполняете цикл и сравнение, установите значение по умолчанию $matches->round на «первое», затем, при циклическом выполнении, если условие сравнения равно true, переопределите $matches->roundна "ко" и вырваться из петли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...