mirror of
https://github.com/danog/AsyncOrm.git
synced 2024-11-30 04:39:45 +01:00
Fixes
This commit is contained in:
parent
73909971b0
commit
8add7e504c
@ -75,8 +75,12 @@ trait DbAutoProperties
|
|||||||
);
|
);
|
||||||
|
|
||||||
$promises[] = async(function () use ($config, $property) {
|
$promises[] = async(function () use ($config, $property) {
|
||||||
$v = $config->build($property->getValue());
|
$v = $config->build(
|
||||||
$property->setValue($v);
|
$property->isInitialized($this)
|
||||||
|
? $property->getValue($this)
|
||||||
|
: null
|
||||||
|
);
|
||||||
|
$property->setValue($this, $v);
|
||||||
if ($v instanceof CachedArray) {
|
if ($v instanceof CachedArray) {
|
||||||
$this->properties []= $v;
|
$this->properties []= $v;
|
||||||
}
|
}
|
||||||
|
@ -31,16 +31,11 @@ abstract class DbObject
|
|||||||
*
|
*
|
||||||
* @internal Do not invoke manually.
|
* @internal Do not invoke manually.
|
||||||
*/
|
*/
|
||||||
final public function initDb(ObjectContainer $mapper, string|int $key): void
|
final public function initDb(ObjectContainer $mapper, string|int $key, FieldConfig $config): void
|
||||||
{
|
{
|
||||||
if (isset($this->key)) {
|
|
||||||
$this->mapper = $mapper;
|
$this->mapper = $mapper;
|
||||||
$this->key = $key;
|
$this->key = $key;
|
||||||
return;
|
$this->onLoaded($config);
|
||||||
}
|
|
||||||
$this->mapper = $mapper;
|
|
||||||
$this->key = $key;
|
|
||||||
$this->onLoaded();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,7 +52,7 @@ abstract class DbObject
|
|||||||
/**
|
/**
|
||||||
* Method invoked after loading the object.
|
* Method invoked after loading the object.
|
||||||
*/
|
*/
|
||||||
protected function onLoaded(): void
|
protected function onLoaded(FieldConfig $config): void
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -382,11 +382,15 @@ final class OrmTest extends TestCase
|
|||||||
$this->assertSame(1, $obj->saveAfterCnt);
|
$this->assertSame(1, $obj->saveAfterCnt);
|
||||||
$this->assertSame(1, $obj->saveBeforeCnt);
|
$this->assertSame(1, $obj->saveBeforeCnt);
|
||||||
|
|
||||||
|
$obj->arr[12345] = 54321;
|
||||||
|
$this->assertSame(54321, $obj->arr[12345]);
|
||||||
|
|
||||||
$obj = $orm[321];
|
$obj = $orm[321];
|
||||||
|
|
||||||
$this->assertSame(1, $obj->loadedCnt);
|
$this->assertSame(1, $obj->loadedCnt);
|
||||||
$this->assertSame(1, $obj->saveAfterCnt);
|
$this->assertSame(1, $obj->saveAfterCnt);
|
||||||
$this->assertSame(1, $obj->saveBeforeCnt);
|
$this->assertSame(1, $obj->saveBeforeCnt);
|
||||||
|
$this->assertSame(54321, $obj->arr[12345]);
|
||||||
|
|
||||||
unset($obj);
|
unset($obj);
|
||||||
$orm = $field->build();
|
$orm = $field->build();
|
||||||
@ -395,12 +399,14 @@ final class OrmTest extends TestCase
|
|||||||
$this->assertSame(1, $obj->loadedCnt);
|
$this->assertSame(1, $obj->loadedCnt);
|
||||||
$this->assertSame(0, $obj->saveAfterCnt);
|
$this->assertSame(0, $obj->saveAfterCnt);
|
||||||
$this->assertSame(0, $obj->saveBeforeCnt);
|
$this->assertSame(0, $obj->saveBeforeCnt);
|
||||||
|
$this->assertSame(54321, $obj->arr[12345]);
|
||||||
|
|
||||||
$orm[321] = $obj;
|
$orm[321] = $obj;
|
||||||
|
|
||||||
$this->assertSame(1, $obj->loadedCnt);
|
$this->assertSame(1, $obj->loadedCnt);
|
||||||
$this->assertSame(0, $obj->saveAfterCnt);
|
$this->assertSame(0, $obj->saveAfterCnt);
|
||||||
$this->assertSame(0, $obj->saveBeforeCnt);
|
$this->assertSame(0, $obj->saveBeforeCnt);
|
||||||
|
$this->assertSame(54321, $obj->arr[12345]);
|
||||||
|
|
||||||
$f = new ReflectionProperty(ObjectArray::class, 'cache');
|
$f = new ReflectionProperty(ObjectArray::class, 'cache');
|
||||||
$f->getValue($orm)->flushCache();
|
$f->getValue($orm)->flushCache();
|
||||||
|
@ -2,23 +2,38 @@
|
|||||||
|
|
||||||
namespace danog\AsyncOrm\Test;
|
namespace danog\AsyncOrm\Test;
|
||||||
|
|
||||||
|
use danog\AsyncOrm\Annotations\OrmMappedArray;
|
||||||
|
use danog\AsyncOrm\DbArray;
|
||||||
|
use danog\AsyncOrm\DbAutoProperties;
|
||||||
use danog\AsyncOrm\DbObject;
|
use danog\AsyncOrm\DbObject;
|
||||||
|
use danog\AsyncOrm\FieldConfig;
|
||||||
|
use danog\AsyncOrm\KeyType;
|
||||||
|
use danog\AsyncOrm\ValueType;
|
||||||
|
|
||||||
final class TestObject extends DbObject
|
final class TestObject extends DbObject
|
||||||
{
|
{
|
||||||
|
use DbAutoProperties;
|
||||||
|
|
||||||
public int $loadedCnt = 0;
|
public int $loadedCnt = 0;
|
||||||
public int $saveAfterCnt = 0;
|
public int $saveAfterCnt = 0;
|
||||||
public int $saveBeforeCnt = 0;
|
public int $saveBeforeCnt = 0;
|
||||||
|
|
||||||
public mixed $savedProp = null;
|
public mixed $savedProp = null;
|
||||||
|
|
||||||
|
#[OrmMappedArray(
|
||||||
|
KeyType::INT,
|
||||||
|
ValueType::INT
|
||||||
|
)]
|
||||||
|
public DbArray $arr;
|
||||||
|
|
||||||
public function __sleep()
|
public function __sleep()
|
||||||
{
|
{
|
||||||
return ['savedProp'];
|
return ['savedProp', 'arr'];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function onLoaded(): void
|
protected function onLoaded(FieldConfig $config): void
|
||||||
{
|
{
|
||||||
|
$this->initDbProperties($config->settings, $config->table);
|
||||||
$this->loadedCnt++;
|
$this->loadedCnt++;
|
||||||
}
|
}
|
||||||
protected function onAfterSave(): void
|
protected function onAfterSave(): void
|
||||||
@ -27,6 +42,7 @@ final class TestObject extends DbObject
|
|||||||
}
|
}
|
||||||
protected function onBeforeSave(): void
|
protected function onBeforeSave(): void
|
||||||
{
|
{
|
||||||
|
$this->saveDbProperties();
|
||||||
$this->saveBeforeCnt++;
|
$this->saveBeforeCnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user