Быстрый старт
Начните работу с Rowcast за 5 минут.
Содержание
Установка
Установите Rowcast через Composer:
composer require ascetic-soft/rowcast
Требования:
- PHP >= 8.4
- Расширение PDO
Ваш первый DTO
Шаг 1: Определите DTO-класс
// src/User.php
class User
{
public int $id;
public string $name;
public string $email;
}
Не нужен базовый класс, интерфейсы или аннотации — просто обычный PHP-класс с типизированными свойствами.
Шаг 2: Создайте подключение
use AsceticSoft\Rowcast\Connection;
$connection = Connection::create(
dsn: 'mysql:host=localhost;dbname=app',
username: 'root',
password: 'secret',
);
Шаг 3: Создайте DataMapper и выполните CRUD-операции
use AsceticSoft\Rowcast\DataMapper;
$mapper = new DataMapper($connection);
// Вставка
$user = new User();
$user->name = 'Alice';
$user->email = 'alice@example.com';
$id = $mapper->insert('users', $user);
// Поиск
$user = $mapper->findOne(User::class, ['id' => 1]);
// Обновление
$user->name = 'Alice Updated';
$mapper->update('users', $user, ['id' => $user->id]);
// Удаление
$mapper->delete('users', ['id' => $user->id]);
Как работает Auto-режим
Когда вы передаёте class-string (например, User::class) в методы чтения, Rowcast:
- Определяет имя таблицы из имени класса (
User→users,UserProfile→user_profiles) - Выполняет SQL-запрос к полученной таблице
- Маппит каждую колонку в свойство через
SnakeCaseToCamelCaseConverter(created_at→createdAt) - Приводит значения к объявленным PHP-типам (
string→int,"2025-01-01"→DateTimeImmutableи т.д.) - Возвращает полностью гидратированные DTO-объекты
Всё это происходит автоматически — конфигурация не требуется.
Неинициализированные свойства (например, автоинкрементный id) автоматически пропускаются при insert(). Это значит, что вам не нужно задавать значение по умолчанию для первичного ключа.
Работа с Enum
Rowcast поддерживает BackedEnum-типы из коробки:
enum Status: string
{
case Active = 'active';
case Inactive = 'inactive';
}
class UserDto
{
public int $id;
public string $name;
public Status $status;
}
$dto = new UserDto();
$dto->name = 'Alice';
$dto->status = Status::Active;
$mapper->insert('users', $dto);
// Сохранено как: status = 'active'
$user = $mapper->findOne(UserDto::class, ['id' => 1]);
// $user->status === Status::Active
Работа с DateTime
Свойства типов DateTime, DateTimeImmutable и DateTimeInterface обрабатываются автоматически:
class Post
{
public int $id;
public string $title;
public DateTimeImmutable $createdAt;
}
$post = new Post();
$post->title = 'Hello World';
$post->createdAt = new DateTimeImmutable();
$mapper->insert('posts', $post);
// Сохранено как: created_at = '2025-06-15 10:30:00'
$found = $mapper->findOne(Post::class, ['id' => 1]);
// $found->createdAt instanceof DateTimeImmutable
Что дальше?
- Connection — PDO-обёртка, прямые запросы, транзакции и savepoints
- DataMapper — Полный справочник CRUD-операций
- Маппинг — Auto-режим и
ResultSetMapping - Приведение типов — Встроенные и пользовательские кастеры типов
- Построитель запросов — Fluent SQL-построитель запросов
- Справочник API — Полный справочник классов и методов