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;
Ці нові методи відносин спрощують написання виразного та підтримуваного коду, чітко демонструючи зв’язки між моделями та роблячи доступ до складних даних більш інтуїтивним
Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю
Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!