Спрощення зв'язків HasManyThrough за допомогою підтримки CanBeOneOfMany у Laravel

Перекладено ШІ 6 Laravel News 03 червня, 2026

Laravel нещодавно додав нову функцію CanBeOneOfMany для Eloquent ORM, яка значно спрощує отримання окремих моделей з HasManyThrough відносин. Ця стаття розкриває, як використовувати ці нові можливості для покращення структури та читабельності вашого коду — дізнайтеся, як легко отримати останні, найстаріші або спеціально відфільтровані записи

Laravel покращує свій Eloquent ORM, додаючи підтримку CanBeOneOfMany для відносин HasManyThrough. Ця функція дозволяє розробникам елегантно отримувати окрему модель з відносини HasManyThrough, використовуючи чіткий та виразний синтаксис для отримання останніх, перших або налаштованих записів.

Eloquent вже забезпечував потужні інструменти для роботи з комплексними відносинами. Завдяки підтримці CanBeOneOfMany, ви тепер можете отримувати окрему модель з відносини HasManyThrough, спираючись на різні критерії:

namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOneThrough;
 
class Customer extends Model
{
    /**
     * Отримати найновіше замовлення для клієнта.
     */
    public function latestOrder(): HasOneThrough
    {
        return $this->orders()->one()->latestOfMany();
    }
}

Ця функція особливо корисна для доступу до конкретних записів з великих наборів відносин:

namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOneThrough;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
 
class Department extends Model
{
    /**
     * Отримати всі завдання для відділу.
     */
    public function tasks(): HasManyThrough
    {
        return $this->hasManyThrough(
            Task::class,
            Employee::class,
            'department_id',
            'employee_id'
        );
    }
 
    /**
     * Отримати найновіше завдання для відділу.
     */
    public function latestTask(): HasOneThrough
    {
        return $this->tasks()->one()->latestOfMany();
    }
 
    /**
     * Отримати найперше створене завдання для відділу.
     */
    public function firstTask(): HasOneThrough
    {
        return $this->tasks()->one()->oldestOfMany();
    }
 
    /**
     * Отримати найвищий пріоритет завдання для відділу.
     */
    public function criticalTask(): HasOneThrough
    {
        return $this->tasks()->one()->ofMany('priority', 'max');
    }
 
    /**
     * Отримати найтриваліше завдання.
     */
    public function longestTask(): HasOneThrough
    {
        return $this->tasks()->one()->ofMany([
            'estimated_hours' => 'max',
        ]);
    }
}

З визначеними методами відносин доступ до конкретних записів став простим:

$department = Department::find(1);
 
// Отримати найновіше завдання
$latestTask = $department->latestTask;
 
// Отримати найперше створене завдання
$firstTask = $department->firstTask;
 
// Отримати завдання з найвищим пріоритетом
$criticalTask = $department->criticalTask;
 
// Отримати завдання з найтривалішою оцінкою годин
$longestTask = $department->longestTask;

Ці нові методи відносин спрощують написання виразного та підтримуваного коду, чітко демонструючи зв’язки між моделями та роблячи доступ до складних даних більш інтуїтивним

Популярні

Інше, що варто прочитати

10 Оновлено 02 червня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!

26 Оновлено 02 червня, 2026

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

18 Оновлено 02 червня, 2026

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю