Получить последнюю запись
У меня есть три таблицы
- users
- passports
- sections
Мне необходимо получить перечень всех пользователей с их паспортаными данными, но необходимо получить данные только актуального паспорта(последнный выданный, колонка passportDate)
Структура таблиц: USERS
Table
...
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->foreignId('section_id')->nullable()->constrained();
...
Section
Table
...
$table->string('title');
$table->string('description');
...
Passport
Table
...
$table->date('passportDate')->nullable();
$table->string('firstName')->nullable();
$table->string('middleName')->nullable();
$table->string('lastName')->nullable();
$table->foreignId('user_id')->constrained()->onDelete('cascade');
...
Нужен массив записей со следующими полями:
"email" "section_title" "firstName" "middleName" "lastName"
Мой вариант запроса:
$users = User::select('users.*', 'sections.title', 'passports.firstName', 'passports.middleName', 'passports.lastName')
->leftJoin('sections', 'sections.id', 'users.section_id')
->leftJoin('passports', 'user_id', 'users.id')
->orderBy('user_id')
->get();
Проблема в том, что у пользователя может быть несколько паспортов, в таком случае мой запрос дублирует записи о пользователе. Если в базе у пользователя 5 паспортов, я получаю массив с 5 записи этого пользователя. Подскажите как исправить запрос для моей задачи.