mirror of
https://github.com/danog/AsyncOrm.git
synced 2024-11-26 12:24:59 +01:00
Feat: support of custom serializers
This commit is contained in:
parent
c820a4023a
commit
fe29289045
@ -18,6 +18,7 @@ namespace danog\AsyncOrm\Annotations;
|
|||||||
|
|
||||||
use Attribute;
|
use Attribute;
|
||||||
use danog\AsyncOrm\KeyType;
|
use danog\AsyncOrm\KeyType;
|
||||||
|
use danog\AsyncOrm\Serializer;
|
||||||
use danog\AsyncOrm\ValueType;
|
use danog\AsyncOrm\ValueType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,7 +55,11 @@ final class OrmMappedArray
|
|||||||
/**
|
/**
|
||||||
* Table name postfix, if null defaults to the property name.
|
* Table name postfix, if null defaults to the property name.
|
||||||
*/
|
*/
|
||||||
public readonly ?string $tablePostfix = null
|
public readonly ?string $tablePostfix = null,
|
||||||
|
/**
|
||||||
|
* Provide custom serializer for table.
|
||||||
|
*/
|
||||||
|
public readonly ?Serializer $serializer = null,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,13 @@ trait DbAutoProperties
|
|||||||
['cacheTtl' => $ttl]
|
['cacheTtl' => $ttl]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
$serializer = $attr->serializer ?? $settings->serializer;
|
||||||
|
if ($serializer !== $settings->serializer) {
|
||||||
|
$settings = new $settings(...\array_merge(
|
||||||
|
(array) $settings,
|
||||||
|
['serializer' => $serializer]
|
||||||
|
));
|
||||||
|
}
|
||||||
if ($settings instanceof MysqlSettings) {
|
if ($settings instanceof MysqlSettings) {
|
||||||
$optimize = $attr->optimizeIfWastedMb ?? $settings->optimizeIfWastedMb;
|
$optimize = $attr->optimizeIfWastedMb ?? $settings->optimizeIfWastedMb;
|
||||||
|
|
||||||
|
@ -433,8 +433,10 @@ final class OrmTest extends TestCase
|
|||||||
|
|
||||||
$obj->arr[12345] = 54321;
|
$obj->arr[12345] = 54321;
|
||||||
$obj->arr2[123456] = 654321;
|
$obj->arr2[123456] = 654321;
|
||||||
|
$obj->arr5[123] = "7734";
|
||||||
$this->assertSame(54321, $obj->arr[12345]);
|
$this->assertSame(54321, $obj->arr[12345]);
|
||||||
$this->assertSame(654321, $obj->arr2[123456]);
|
$this->assertSame(654321, $obj->arr2[123456]);
|
||||||
|
$this->assertSame("7734", $obj->arr5[123]);
|
||||||
$this->assertCount(1, $obj->arr);
|
$this->assertCount(1, $obj->arr);
|
||||||
$this->assertCount(1, $obj->arr2);
|
$this->assertCount(1, $obj->arr2);
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ use danog\AsyncOrm\DbArrayBuilder;
|
|||||||
use danog\AsyncOrm\DbAutoProperties;
|
use danog\AsyncOrm\DbAutoProperties;
|
||||||
use danog\AsyncOrm\DbObject;
|
use danog\AsyncOrm\DbObject;
|
||||||
use danog\AsyncOrm\KeyType;
|
use danog\AsyncOrm\KeyType;
|
||||||
|
use danog\AsyncOrm\Serializer\Json;
|
||||||
use danog\AsyncOrm\ValueType;
|
use danog\AsyncOrm\ValueType;
|
||||||
|
|
||||||
final class TestObject extends DbObject
|
final class TestObject extends DbObject
|
||||||
@ -67,6 +68,14 @@ final class TestObject extends DbObject
|
|||||||
)]
|
)]
|
||||||
public DbArray $arr4;
|
public DbArray $arr4;
|
||||||
|
|
||||||
|
#[OrmMappedArray(
|
||||||
|
keyType: KeyType::INT,
|
||||||
|
valueType: ValueType::SCALAR,
|
||||||
|
cacheTtl: 0,
|
||||||
|
serializer: new Json(),
|
||||||
|
)]
|
||||||
|
public DbArray $arr5;
|
||||||
|
|
||||||
public function __sleep()
|
public function __sleep()
|
||||||
{
|
{
|
||||||
return ['savedProp', 'arr', 'arr2', 'arr3', 'arr4'];
|
return ['savedProp', 'arr', 'arr2', 'arr3', 'arr4'];
|
||||||
|
Loading…
Reference in New Issue
Block a user