Проблема в решение поставленной задачи! Laravel, mysql, php

Пользователь в get запросе отправляет 2 параметра идентификатор аэропорта отправления и идентификатор аэропорта прибытия (По типу, SVO и KZN, в конечной переменной сохранятся числовые значения), необходимо сравнить эти два параметра со значениями в таблице(from_id и to_id) и взять код рейса(flight_code) всех совпавших вариантов.

Вот таблица в базе данных.

Сам попробовал сделать, но он выводит только первый совпавший вариант. Не подскажете как это можно сделать, не изобретая велосипед.

Выводом будет json ответ со всеми flight_code, которые совпали.`

    $from = Airport::where('iata', $_GET['from'])->first()->id;
    $to = Airport::where('iata', $_GET['to'])->first()->id;

    $temp = Flight::count();

    for($i = $temp; $i!=0; $i--) {
        $f = Flight::where('id', $i)->first()->from_id;
        $t = Flight::where('id', $i)->first()->to_id;

        if($f == $from and $t == $to) {

            $flight = Flight::where('id', $i)->first();
    
            return response()->json([
                'flight_code' => $flight->flight_code
            ]);

        }
    }`

Ответы (2 шт):

Автор решения: midnightelf18

основное замечание пожалуй будет к $_GET[] , если код который вы приложили это код из метода который находится в контроллере ларавер. то вы можете (может даже и должны) использовать класс Request. и насколько мы знаем, параметры которые вы передаете в этот или иной роут обрабатываются указанным методом, и эти параметры соответственно доходят до вашего метода, вы можете их принять использовав этот класс Request. Делается это так:

public function getByFromTo(Request $request) // в переменной $request лежат параметры HTTP запроса 
{
    $data = Foo::where('from_id', $request->from_id) // берем из запроса параметр с именем from_id
        ->where('to_id', $request->to_id) // берем из запроса параметр с именем to_id
        ->get();

    return view('home', ['data' => $data]);
}

естественно, этот метод вернет шаблон home.blade.php, где в переменной data лежат подходящие строки из бд с рейсами. к примеру, в самом шаблоне вы можете вывести эти рейсы так:

@foreach ($data as $row)
<div class="flight">
        <div class="flight_code">Код рейса: {{ $row->flight_code /* получить код рейса */ }}</div>
        <div class="flight_time">Время из: {{ $row->time_from /* получить время из */ }}, время куда: {{ $row->time_to /* получить код куда */ }}</div>
        <div class="flight_cost">Цена: {{ $row->cost /* получить цену */ }}</div>
</div>
@endforeach


в переменной $request лежат все параметры (GET или POST), к ним доступ получить можно так $request->NAME_OF_PARAMETER.
Соотвественно взять только коды подходящих рейсов можно так:

public function getByFromTo(Request $request) // в переменной $request лежат параметры HTTP запроса
    {
        $data = Foo::where('from_id', $request->from_id)
                ->where('to_id', $request->to_id) // берем из запроса параметр с именем to_id
                ->pluck('flight_code')
                ->toArray();

        return $data;
    }

теперь метод вернет массив только с кодами подходящих рейсов

→ Ссылка
Автор решения: Никита

А как можно вернуть json ответ в таком стиле, когда нам не известно сколько будет маршрутов туда и обратно? От чего отталкиваться, в каким направление идти? Пример

→ Ссылка