Маппинг
Auto-режим с соглашениями, явный Mapping и пользовательские конвертеры имён.
Содержание
Auto-режим
В auto-режиме Rowcast определяет имена таблиц и маппинг колонок автоматически, используя соглашения.
Определение имени таблицы
Имя класса конвертируется в имя таблицы во множественном числе в snake_case:
| Имя класса | Имя таблицы |
|---|---|
User |
users |
UserProfile |
user_profiles |
SimpleUser |
simple_users |
Маппинг свойств-колонок
По умолчанию SnakeCaseToCamelCase выполняет конвертацию:
| Имя колонки | Имя свойства |
|---|---|
created_at |
createdAt |
user_name |
userName |
id |
id |
Mapping (Explicit-режим)
Когда имена колонок не соответствуют соглашениям или имя таблицы отличается, используйте Mapping:
use AsceticSoft\Rowcast\Mapping;
$mapping = Mapping::explicit(User::class, 'custom_users')
->column('usr_nm', 'name')
->column('usr_email', 'email')
->column('id', 'id');
Используйте маппинг с любой операцией DataMapper:
$mapper->insert($mapping, $user);
$user = $mapper->findOne($mapping, ['id' => 1]);
$mapper->update($mapping, $user, ['id' => 1]);
$mapper->delete($mapping, ['id' => 1]);
Авто-режим с переопределениями
$mapping = Mapping::auto(User::class, 'custom_users')
->column('usr_email', 'email')
->ignore('internalNote');
Конвертеры имён
Конвертеры имён определяют, как имена свойств маппятся в имена колонок и наоборот.
SnakeCaseToCamelCase (по умолчанию)
Конвертирует между snake_case-колонками и camelCase-свойствами:
use AsceticSoft\Rowcast\NameConverter\SnakeCaseToCamelCase;
$converter = new SnakeCaseToCamelCase();
$converter->toPropertyName('created_at'); // 'createdAt'
$converter->toColumnName('createdAt'); // 'created_at'
Пользовательский конвертер имён
Реализуйте NameConverterInterface для собственной логики:
use AsceticSoft\Rowcast\NameConverter\NameConverterInterface;
class PrefixedConverter implements NameConverterInterface
{
public function toPropertyName(string $columnName): string
{
return lcfirst(str_replace('usr_', '', $columnName));
}
public function toColumnName(string $propertyName): string
{
return 'usr_' . $propertyName;
}
}
$mapper = new DataMapper($connection, nameConverter: new PrefixedConverter());