Compare commits

...

4 Commits

Author SHA1 Message Date
Alexander Pankratov
a448696930
Update contacts in README.md 2024-09-24 20:36:55 +02:00
1a5129adea
Merge pull request #1 from danog/custom-serializers
Feat: support of custom serializers in OrmMappedArray
2024-09-24 18:49:13 +02:00
Alexander Pankratov
fe29289045 Feat: support of custom serializers 2024-09-24 18:06:04 +02:00
5035c06615 Clarified that blobs can also be serialized as scalars 2024-09-24 17:51:28 +02:00
5 changed files with 26 additions and 3 deletions

View File

@ -5,7 +5,7 @@
[![Psalm level 1](https://shepherd.dev/github/danog/AsyncOrm/level.svg)](https://shepherd.dev/github/danog/AsyncOrm)
![License](https://img.shields.io/github/license/danog/AsyncOrm)
Async ORM based on AMPHP v3 and fibers, created by Daniil Gentili (https://daniil.it) and Alexander Pankratov (alexander@i-c-a.su).
Async ORM based on AMPHP v3 and fibers, created by Daniil Gentili (https://daniil.it) and Alexander Pankratov (https://github.com/xtrime-ru).
Supports MySQL, Redis, Postgres.
@ -209,7 +209,7 @@ For optimal performance, the specified types must be as strict as possible, here
* `ValueType::INT`: Direct storage of integer values.
* `ValueType::BOOL`: Direct storage of boolean values.
* `ValueType::FLOAT`: Direct storage of floating point (double precision) values.
* `ValueType::SCALAR`: Values of any scalar type (including arrays, excluding objects), serialized as specified in the settings.
* `ValueType::SCALAR`: Values of any scalar type (including blobs and arrays, excluding objects), serialized as specified in the settings.
Using SCALAR worsens performances, please use any of the other types if possible.
* `ValueType::OBJECT`: Objects extending DbObject, serialized as specified in the settings.

View File

@ -18,6 +18,7 @@ namespace danog\AsyncOrm\Annotations;
use Attribute;
use danog\AsyncOrm\KeyType;
use danog\AsyncOrm\Serializer;
use danog\AsyncOrm\ValueType;
/**
@ -54,7 +55,11 @@ final class OrmMappedArray
/**
* 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,
) {
}
}

View File

@ -78,6 +78,13 @@ trait DbAutoProperties
['cacheTtl' => $ttl]
));
}
$serializer = $attr->serializer ?? $settings->serializer;
if ($serializer !== $settings->serializer) {
$settings = new $settings(...\array_merge(
(array) $settings,
['serializer' => $serializer]
));
}
if ($settings instanceof MysqlSettings) {
$optimize = $attr->optimizeIfWastedMb ?? $settings->optimizeIfWastedMb;

View File

@ -433,8 +433,10 @@ final class OrmTest extends TestCase
$obj->arr[12345] = 54321;
$obj->arr2[123456] = 654321;
$obj->arr5[123] = "7734";
$this->assertSame(54321, $obj->arr[12345]);
$this->assertSame(654321, $obj->arr2[123456]);
$this->assertSame("7734", $obj->arr5[123]);
$this->assertCount(1, $obj->arr);
$this->assertCount(1, $obj->arr2);

View File

@ -29,6 +29,7 @@ use danog\AsyncOrm\DbArrayBuilder;
use danog\AsyncOrm\DbAutoProperties;
use danog\AsyncOrm\DbObject;
use danog\AsyncOrm\KeyType;
use danog\AsyncOrm\Serializer\Json;
use danog\AsyncOrm\ValueType;
final class TestObject extends DbObject
@ -67,6 +68,14 @@ final class TestObject extends DbObject
)]
public DbArray $arr4;
#[OrmMappedArray(
keyType: KeyType::INT,
valueType: ValueType::SCALAR,
cacheTtl: 0,
serializer: new Json(),
)]
public DbArray $arr5;
public function __sleep()
{
return ['savedProp', 'arr', 'arr2', 'arr3', 'arr4'];