Как правильно построить запрос к БД в Laravel 6 на получение данных с запросами на фильтр и вывести все в пагинацию по полю с отношениями?

В Laravel 6 вы можете строить запросы к базе данных, используя фасад DB или модель Eloquent. Для выполнения запросов на фильтрацию и отображения данных в пагинацию с отношениями, вы можете использовать модель Eloquent вместе с методами where(), with() и paginate().

Предположим, у вас есть модель User, которая имеет связь с моделью Post. Вам нужно выполнить запрос, чтобы получить всех пользователей, у которых есть посты от определенного пользователя с определенным заголовком, и отобразить результаты в пагинированной форме.

Первым шагом будет создание маршрута в вашем файле routes/web.php, который будет обрабатывать запрос:

Route::get('/users', 'UserController@index');

Затем создайте контроллер UserController, в котором будет метод index() для обработки запроса:

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppUser;

class UserController extends Controller
{
    public function index(Request $request)
    {
        $users = User::with('posts')
            ->where('posts.user_id', $request->input('user_id'))
            ->where('posts.title', $request->input('title'))
            ->paginate(10);

        return view('users.index', compact('users'));
    }
}

В данном примере мы используем метод with('posts'), чтобы добавить отношение с моделью Post, чтобы забрать данные о постах пользователя. Метод where() используется для фильтрации результатов по полю user_id и title. Метод paginate() определяет количество записей на страницу.

Заключительным шагом является создание представления users/index.blade.php, где вы можете отобразить полученные пользователи и их посты:

@foreach ($users as $user)
    <h2>{{ $user->name }}</h2>

    <ul>
        @foreach ($user->posts as $post)
            <li>{{ $post->title }}</li>
        @endforeach
    </ul>
@endforeach

{{ $users->links() }}

В данном примере мы отображаем имя пользователя и список его постов. В конце мы вызываем метод links(), чтобы вывести пагинацию на странице.

Теперь, когда вы запрашиваете URL /users с параметрами user_id и title, Laravel выполнит запрос к базе данных, получит данные с отношениями и отобразит их в пагинированной форме на странице.

Надеюсь, это помогло вам построить запрос к базе данных в Laravel 6 с использованием фильтрации и пагинации с отношениями. Если у вас возникли еще вопросы, не стесняйтесь задавать.