Маппинг
Auto-режим с соглашениями, явный ResultSetMapping и пользовательские конвертеры имён.
Содержание
Auto-режим
В auto-режиме Rowcast определяет имена таблиц и маппинг колонок автоматически, используя соглашения.
Определение имени таблицы
Имя класса конвертируется в имя таблицы во множественном числе в snake_case:
| Имя класса | Имя таблицы |
|---|---|
User |
users |
UserProfile |
user_profiles |
SimpleUser |
simple_users |
Маппинг свойств-колонок
По умолчанию SnakeCaseToCamelCaseConverter выполняет конвертацию:
| Имя колонки | Имя свойства |
|---|---|
created_at |
createdAt |
user_name |
userName |
id |
id |
ResultSetMapping (Explicit-режим)
Когда имена колонок не соответствуют соглашениям или имя таблицы отличается, используйте ResultSetMapping:
use AsceticSoft\Rowcast\Mapping\ResultSetMapping;
$rsm = new ResultSetMapping(User::class, table: 'custom_users');
$rsm->addField('usr_nm', 'name')
->addField('usr_email', 'email')
->addField('id', 'id');
Используйте маппинг с любой операцией DataMapper:
$mapper->insert($rsm, $user);
$user = $mapper->findOne($rsm, ['id' => 1]);
$mapper->update($rsm, $user, ['id' => 1]);
$mapper->delete($rsm, ['id' => 1]);
Создание из массива
$rsm = ResultSetMapping::fromArray([
'class' => User::class,
'table' => 'custom_users',
'fields' => [
'usr_nm' => 'name',
'usr_email' => 'email',
],
]);
Конвертеры имён
Конвертеры имён определяют, как имена свойств маппятся в имена колонок и наоборот.
SnakeCaseToCamelCaseConverter (по умолчанию)
Конвертирует между snake_case-колонками и camelCase-свойствами:
use AsceticSoft\Rowcast\Mapping\NameConverter\SnakeCaseToCamelCaseConverter;
$converter = new SnakeCaseToCamelCaseConverter();
$converter->toPropertyName('created_at'); // 'createdAt'
$converter->toColumnName('createdAt'); // 'created_at'
NullConverter
Без конвертации — имена свойств используются как имена колонок:
use AsceticSoft\Rowcast\Mapping\NameConverter\NullConverter;
$mapper = new DataMapper($connection, nameConverter: new NullConverter());
Пользовательский конвертер имён
Реализуйте NameConverterInterface для собственной логики:
use AsceticSoft\Rowcast\Mapping\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());