Управління відносинами володіння між моделями Eloquent за допомогою Laravel Ownable

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 03 вересня, 2025
Вам цікаво, як ефективно управляти власністю моделей у вашому додатку Laravel? Ознайомтеся з пакетом Laravel Ownable, який дозволяє легко передавати права на володіння, відстежувати історію власності та здійснювати операції з кількома об'єктами одночасно

Пакет Laravel Ownable, розроблений Абдуллою Совейлем, надає зручний і гнучкий спосіб управління правом власності на будь-яку модель з іншої моделі у вашій Laravel аплікації.

# Основні можливості

# Приклад використання

Припустимо, у нас є моделі User та Task. Завдяки пакету Laravel Ownable ми можемо представити право власності, використовуючи контракти Owner та Ownable, а також трейт HasOwnables і IsOwnable у відповідних моделях.

use Sowailem\Ownable\Traits\HasOwnables;
use Sowailem\Ownable\Contracts\Owner as OwnerContract;
 
// Модель власника (наприклад, User)
class User extends Authenticatable implements OwnerContract
{
    use HasOwnables;
}
use Sowailem\Ownable\Traits\IsOwnable;
use Sowailem\Ownable\Contracts\Ownable as OwnableContract;
 
// Модель з правом власності
class Task extends Model implements OwnableContract
{
    use IsOwnable;
}

Тепер у вас є доступ до кількох методів, які дозволяють надати, забрати, видалити та перевірити право власності.

$user = User::first();
$task = Task::first();
 
// Надати право власності на задачу користувачу
$user->giveOwnershipTo($task);
 
$task->ownedBy($user);
 
if ($task->isOwnedBy($user)) {
    // Перевірка, чи належить задача користувачу
}
 
// Передача прав власності іншому користувачу
$someOtherUser = User::find(2);
$user->transferOwnership($task, $someOtherUser);
 
// Отримати поточного власника об'єкта
$currentOwner = $task->currentOwner();
 
// Отримати всіх власників (включно з історією власності)
$allOwnersOfTheTask = $task->owners()->get();
 
// Прибрати право власності
$user->takeOwnershipFrom($task);

Якщо ви віддаєте перевагу використовувати реалізацію фасаду, вона також доступна.

use Illuminate\Support\Facades\Log;
use Sowailem\Ownable\Facades\Owner;
 
$user = User::find(4);
$task = Task::find(2);
 
Owner::give($user, $task);
 
if (Owner::check($user, $task)) {
    Log::info("Користувач {$user->id} є власником задачі {$task->id}");
}
 
$newOwner = User::find(1);
 
Owner::transfer($user, $newOwner, $task);
Log::info("Задача {$task->id} тепер належить {$task->currentOwner()->name}");

Ще однією корисною функцією пакету є наявність міграції, яка допомагає відстежувати зміни у праві власності на ваші моделі. Записи у вашій базі даних виглядають приблизно так:

Дізнайтеся більше про цей пакет та перегляньте вихідний код на GitHub

Популярні

Logomark Logotype

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

Logomark Logotype

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення