Как сделать запрос multiple отдающий посты привязанные к городам Laravel?

Для создания запроса на получение постов, привязанных к городам в 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.