Column mapping

Learn how to map columns

Type casting

You can cast column values to specific types by using the cast method. The following types are supported: integer or int, float, boolean or bool, string, date, json, and json-assoc.

class User extends Entity implements IEntityMapper
{
    public static function mapEntity(EntityMapper $mapper)
    {
        $mapper->cast([
            'age' => 'integer', // To integer number (alternatively int)
            'height' => 'float', // To float number
            'active' => 'boolean', // To boolean value (alternatively bool)
            'name' => 'string', // To string value
            'birthday' => 'date', // To DateTime object,
            'data1' => 'json', // To JSON (native objects)
            'data2' => 'json-assoc', // To JSON (associative arrays)
        ]);
    }
}

If your column allows null values you can specify this by prefixing the casting type with an ? sign.

$mapper->cast([
    'description' => '?string'
]);

Getters and setters

For each column, you can specify a callback that will be called by the data mapper, when the value is read from a column or when a value is set to a column.

Setting a callback when a column’s value is set, can be done with the help of the setter method. This callback is called before casting the value’s type.

$mapper->setter('password', function(string $value){
    return password_hash($value);
});

Adding a getter callback is done by using the getter method. This callback is called after casting the value’s type.

$mapper->getter('name', function(string $value){
    return strtolower($value);
});

Assignable and guarded columns

The assignable method allows developers to specify which columns can be mass-assigned with the help of the data mapper’s assign method.

$mapper->assiganble(['name', 'description', 'age']);

The guarded method allows developers to specify which columns can not be mass-assigned with the help of the data mapper’s assign method.

$mapper->guarded(['title', 'content']);

When mapping an entity, you should use only one of the above methods.