Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас
Посібники 10 серпня 2026

Repository - доступ до даних

Repository відділяє бізнес-логіку від деталей доступу до даних за стабільним контрактом читання й запису.

Яку проблему вирішує

Коли сервіси звертаються до ORM напряму, бізнес-логіка прив'язується до Eloquent: запити розповзаються по коду, а підмінити джерело даних чи перевірити логіку без бази стає складно.

Як вирішує

Доступ до даних ховається за інтерфейсом-репозиторієм. Сервіс залежить від контракту, а конкретна реалізація (Eloquent, in-memory, API) підставляється через контейнер. У тестах дані легко підмінити фейком.

interface UserRepo
{
  public function byId(int $id): ?User;

  public function search(string $q);
}

class EloquentUserRepo implements UserRepo
{
  public function byId(int $id): ?User
  {
    return User::find($id);
  }

  public function search(string $q)
  {
    return User::query()
      ->where('name', 'like', "%$q%")
      ->get();
  }
}

class UserService
{
  public function __construct(private UserRepo $repo) {}

  public function show($id)
  {
    return $this->repo->byId($id);
  }
}

Де застосовувати

  • Складні проєкти та інтеграції, де сервісам не можна залежати від ORM напряму.
  • Коли джерело даних чи структура моделей може змінитися або потребує заміни у тестах.

Плюси та мінуси

  • + Бізнес-логіка не залежить від ORM; дані легко підмінити фейком або in-memory.
  • + Доступ до даних зосереджений за одним контрактом.
  • Додатковий шар і ризик дублювати API Eloquent.
  • У простих CRUD-екранах репозиторій зайвий - Eloquent уже сам по собі шар доступу до даних.
0

Ця стаття - частина серії

Патерни проєктування

24 / 24

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Вакансії за темою

Softprom Нова
Сьогодні

FullStack Developer (PHP Laravel + React) for Automation and AI

FullStack розробник для проектів автоматизації та AI. Розробка backend на PHP Laravel з мікросервісною архітектурою, інтеграція ERP/CRM систем (NetSuite, HubSpot), та frontend на React з AI-функціоналом (chatbots, генерація контенту). Потребує 5+ років PHP, 3+ років Laravel на рівні архітектури, досвід мікросервісів, OOP, REST API, Websockets.

IT Dream Service Нова
1 дн. тому

Full-Stack Developer (PHP Laravel + Vue 3)

Full-Stack розробник для внутрішної B2B-платформи управління задачами. Розробка backend на Laravel 10/11 та frontend на Vue 3 + Inertia.js, проектування MySQL, тестування (PHPUnit/Vitest), робота з дизайн-системою Tailwind. Вимога: 3+ років досвіду з Laravel та Vue 3, знання Inertia.js/SPA, MySQL, REST API, Git-флоу, SOLID.

Pitch Avatar Нова
1 дн. тому

FullStack Developer (React+PHP Laravel) in AI Product Company

FullStack розробник для AI-продукту. Розробка React-інтерфейсів та PHP Laravel мікросервісів, інтеграція з LLM (ChatGPT), оптимізація промптів. Вимоги: 5+ років PHP, 3+ років Laravel та React/TypeScript, досвід мікросервісної архітектури, OOP/SOLID, REST API, WebSocket.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

27,950 v2.4.9 12 15

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,774 15.34.0 8

Відео за темою