@hakimi1

Как написать этот код на Laravel?

//[Город отправки]
try {
            $sql = 'SELECT airport.id,city.name 
            FROM airport,city
            WHERE airport.id_city=city.id and city.name=:city_name';
            $result = $pdo->prepare($sql);
            $result->bindValue(':city_name', $_GET['otkuda']);
            $result->execute();
        } catch (PDOException $e) {
            $error = 'Ошибка: ' . $e;
            include 'include/error.html.php';
            exit();
        }
        $city_departure = $result->fetch();
        $otkuda = $city_departure['id'];


//[Город прибытия]
try {
            $sql = 'SELECT airport.id,city.name
        FROM airport,city
        WHERE airport.id_city=city.id and city.name=:city_name';
            $result = $pdo->prepare($sql);
            $result->bindValue(':city_name', $_GET['kuda']);
            $result->execute();
        } catch (PDOException $e) {
            $error = 'Ошибка: ' . $e;
            include 'include/error.html.php';
            exit();
        }
        $city_landing = $result->fetch();
        $kuda = $city_landing['id'];

Написал только это, не могу понять как продолжить
public function search(Request $request){
        $UserController = new UserController();
        $UserController -> authUser();
        $data = (object)[
            'role' => $UserController -> user_role,
        ];
        $search = $request->input('search');
        $posts = DB::table('city')
            ->where('name', 'LIKE', "%{$search}%")
            ->get();
        
        return view('search', compact('posts'))->with(['data'=>$data]);;
    }
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
А что этот код делает? Достает список аэропортов города?

1. Создать таблицы cities и airports (обратите внимание – названия во мн. числе)
cities:
id | name | другие поля, если нужно
airports:
id | city_id | name | другие поля, если нужно

2. Создать модели City и Airport (обратите внимание – названия в ед. числе)

2.1 В модели City создать отношение один-ко-многим (в городе может быть несколько аэропортов)

public function airports(): \Illuminate\Database\Eloquent\Relations\HasMany {}
    return $this->hasMany(\App\Models\Airport::class);
}


2.2 В модели Airport создать обратное отношение

public function city(): \Illuminate\Database\Eloquent\Relations\BelongsTo {}
    return $this->belongsTo(\App\Models\City::class);
}


Теперь можно получать аэропорты города, и город по аэропорту

$from = $request->input['otkuda'];
$city = \App\Models\City::whereName($from) // По названию города
    ->firstOrFail(); 

// или
// $fromId = $request->input['otkuda'];
// $city = \App\Models\City::findOrFail($fromId); // По ID города

dump($city->toArray()); // Получили город
dump($city->airports->toArray()); // Получили список аэропортов города


$airportId = $request->input['airportId'];
$airport = \App\Models\Airport::findOrFail($airportId);

dump($airport->toArray()); // Получили аэропорт по ID
dump($airport->city->toArray()); // Получили город, в котором этот аэропорт находится.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы