Для создания запроса на получение постов, привязанных к городам в Laravel, вам потребуется работать с моделями, миграциями базы данных и контроллерами.
Первым шагом будет создание модели "City", которая будет представлять города. Для этого вам нужно выполнить команду Artisan в терминале:
php artisan make:model City -m
Команда выше создаст модель и миграцию для городов. Откройте файл миграции в папке "database/migrations" и добавьте необходимые столбцы для модели City, например:
public function up() { Schema::create('cities', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); }
Затем выполните команду php artisan migrate
, чтобы применить миграцию и создать таблицу "cities" в базе данных.
Далее создайте модель "Post", которая будет представлять посты привязанные к городам. Выполните следующую команду в терминале:
php artisan make:model Post -m
Откройте файл миграции для модели "Post" и добавьте в нем необходимые столбцы и city_id
:
public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); $table->unsignedBigInteger('city_id'); $table->timestamps(); }); }
Выполните команду php artisan migrate
, чтобы применить миграцию и создать таблицу "posts" в базе данных.
Установите связь между моделями "City" и "Post". В модели "Post" добавьте следующий код:
public function city() { return $this->belongsTo(City::class); }
А в модели "City" добавьте следующий код:
public function posts() { return $this->hasMany(Post::class); }
Теперь вы можете создать контроллер, который будет отвечать за обработку запросов на получение постов, привязанных к городам.
Выполните следующую команду в терминале, чтобы создать контроллер:
php artisan make:controller PostController
Откройте созданный файл контроллера в папке "app/Http/Controllers" и добавьте метод index
, который будет возвращать посты привязанные к городам:
use AppModelsCity; public function index() { $cities = City::with('posts')->get(); return view('posts.index', compact('cities')); }
Метод with('posts')
используется для загрузки связанных постов для каждого города, что позволяет избежать проблемы N+1.
Наконец, создайте представление, где вы будете отображать полученные посты. Создайте файл "index.blade.php" в папке "resources/views/posts" и добавьте следующий код:
@foreach ($cities as $city) <h3>{{ $city->name }}</h3> <ul> @foreach ($city->posts as $post) <li>{{ $post->title }}</li> @endforeach </ul> @endforeach
Это простой шаблон, который будет выводить имена городов и список постов для каждого города.
Наконец, добавьте маршрут для этого запроса в файле "routes/web.php":
use AppHttpControllersPostController; Route::get('/posts', [PostController::class, 'index']);
Теперь вы можете обратиться к /posts
, чтобы увидеть список постов, привязанных к городам в вашем приложении Laravel.