Давайте создадим простой пример, чтобы продемонстрировать, как можно использовать Cycle ORM в контексте DDD. Мы определим доменную сущность User
и репозиторий для работы с этой сущностью. Затем мы выполним базовую операцию добавления пользователя в базу данных.
Шаг 1: Установка Cycle ORM
Первым делом необходимо установить Cycle ORM и необходимые компоненты через Composer:
composer require cycle/orm
composer require cycle/database
composer require cycle/annotated
composer require cycle/proxy-factory
composer require cycle/migrations
Шаг 2: Конфигурация Cycle ORM
Для простоты примера мы создадим минимальную конфигурацию Cycle ORM. В реальном проекте вам потребуется более сложная конфигурация.
use Cycle\ORM\Factory;
use Cycle\ORM\ORM;
use Cycle\ORM\Schema;
use Cycle\Database\Config\DatabaseConfig;
use Cycle\Database\DatabaseManager;
// Настройка соединения с базой данных
$dbal = new DatabaseManager(new DatabaseConfig([
'default' => 'default',
'databases' => [
'default' => ['connection' => 'sqlite']
],
'connections' => [
'sqlite' => [
'driver' => \Cycle\Database\Driver\SQLite\SQLiteDriver::class,
'connection' => 'sqlite::memory:',
'username' => '',
'password' => '',
],
],
]));
// Создание ORM фабрики и самого ORM
$orm = new ORM(new Factory($dbal));
Шаг 3: Определение сущности
Определим простую сущность User
с помощью аннотаций:
declare(strict_types=1);
use Cycle\Annotated\Annotation\Entity;
use Cycle\Annotated\Annotation\Column;
/**
* @Entity
*/
class User
{
public function __construct(
/** @Column(type="primary") */
public int $id,
/** @Column(type="string") */
public string $name,
/** @Column(type="string") */
public string $email
) {}
}
Шаг 4: Работа с сущностью через репозиторий
Теперь определим простой репозиторий для работы с пользователем:
use Cycle\ORM\ORM;
use Cycle\ORM\Transaction;
class UserRepository
{
public function __construct(private ORM $orm)
{
}
public function addUser(User $user): void
{
$transaction = new Transaction($this->orm);
$transaction->persist($user);
$transaction->run();
}
public function getUser(int $id): ?User
{
$repository = $this->orm->getRepository(User::class);
return $repository->findByPK($id);
}
}
Шаг 5: Использование репозитория
Теперь мы можем использовать репозиторий для добавления и получения пользователей:
$userRepository = new UserRepository($orm);
$user = new User('John Doe', 'john.doe@example.com');
$userRepository->addUser($user);
$retrievedUser = $userRepository->getUser($user->id);
echo $retrievedUser->name; // Выведет "John Doe"
Этот пример иллюстрирует базовую настройку и использование Cycle ORM для реализации DDD концепций. В реальном приложении потребуется более сложная конфигурация, включая миграции, более сложные сущности и репозитории, а также обработку зависимостей.
Sources:
https://cycle-orm.dev/docs/annotated-entity/current/en
Leave a reply