mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-02-12 14:58:42 +00:00
bug fixes after datamapper changes
This commit is contained in:
parent
7a5fad6659
commit
d81bf80ada
|
|
@ -1910,7 +1910,7 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$obj = $mapper::getInitialized($mapper, $result[$mapper::$primaryField . '_' . $depth]);
|
$obj = $mapper::getInitializedArray($mapper, $result[$mapper::$primaryField . '_' . $depth]);
|
||||||
|
|
||||||
return $obj ?? $mapper::populateAbstractArray($result, [], $depth);
|
return $obj ?? $mapper::populateAbstractArray($result, [], $depth);
|
||||||
}
|
}
|
||||||
|
|
@ -1941,7 +1941,7 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
return $mapper::createNullModel();
|
return $mapper::createNullModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
$obj = $mapper::getInitializedArray($mapper, $result[$mapper::$primaryField . '_' . $depth]);
|
$obj = $mapper::getInitialized($mapper, $result[$mapper::$primaryField . '_' . $depth]);
|
||||||
|
|
||||||
return $obj ?? $mapper::populateAbstract($result, $mapper::createBaseModel(), $depth);
|
return $obj ?? $mapper::populateAbstract($result, $mapper::createBaseModel(), $depth);
|
||||||
}
|
}
|
||||||
|
|
@ -1995,7 +1995,7 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
foreach (static::$columns as $column => $def) {
|
foreach (static::$columns as $column => $def) {
|
||||||
$alias = $column . '_' . $depth;
|
$alias = $column . '_' . $depth;
|
||||||
|
|
||||||
if (!isset($result[$alias])) {
|
if (!\array_key_exists($alias, $result)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2078,7 +2078,7 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
$column = $def['mapper']::getColumnByMember($member);
|
$column = $def['mapper']::getColumnByMember($member);
|
||||||
$alias = $column . '_' . ($depth - 1);
|
$alias = $column . '_' . ($depth - 1);
|
||||||
|
|
||||||
if (!isset($result[$alias]) || !isset($def['column'])) {
|
if (!\array_key_exists($alias, $result) || !isset($def['column'])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2153,11 +2153,15 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
*/
|
*/
|
||||||
public static function populateAbstractArray(array $result, array $obj = [], int $depth = 3) : array
|
public static function populateAbstractArray(array $result, array $obj = [], int $depth = 3) : array
|
||||||
{
|
{
|
||||||
foreach ($result as $column => $value) {
|
foreach (static::$columns as $column => $def) {
|
||||||
if (!isset(static::$columns[$column]['internal'])) {
|
$alias = $column . '_' . $depth;
|
||||||
|
|
||||||
|
if (!\array_key_exists($alias, $result)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$value = $result[$alias];
|
||||||
|
|
||||||
$path = static::$columns[$column]['internal'];
|
$path = static::$columns[$column]['internal'];
|
||||||
if (\stripos($path, '/') !== false) {
|
if (\stripos($path, '/') !== false) {
|
||||||
$path = \explode('/', $path);
|
$path = \explode('/', $path);
|
||||||
|
|
@ -2166,9 +2170,17 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
$path = \implode('/', $path);
|
$path = \implode('/', $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset(static::$ownsOne[static::$columns[$column]['internal']])) {
|
if (isset(static::$ownsOne[$def['internal']])) {
|
||||||
|
if ($depth - 1 < 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$value = self::populateOwnsOneArray(static::$columns[$column]['internal'], $result, $depth - 1);
|
$value = self::populateOwnsOneArray(static::$columns[$column]['internal'], $result, $depth - 1);
|
||||||
} elseif (isset(static::$belongsTo[static::$columns[$column]['internal']])) {
|
} elseif (isset(static::$belongsTo[$def['internal']])) {
|
||||||
|
if ($depth - 1 < 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$value = self::populateBelongsToArray(static::$columns[$column]['internal'], $result, $depth - 1);
|
$value = self::populateBelongsToArray(static::$columns[$column]['internal'], $result, $depth - 1);
|
||||||
} elseif (\in_array(static::$columns[$column]['type'], ['string', 'int', 'float', 'bool'])) {
|
} elseif (\in_array(static::$columns[$column]['type'], ['string', 'int', 'float', 'bool'])) {
|
||||||
\settype($value, static::$columns[$column]['type']);
|
\settype($value, static::$columns[$column]['type']);
|
||||||
|
|
@ -2181,6 +2193,28 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
$obj = ArrayUtils::setArray($path, $obj, $value, '/', true);
|
$obj = ArrayUtils::setArray($path, $obj, $value, '/', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (static::$hasMany as $member => $def) {
|
||||||
|
$column = $def['mapper']::getColumnByMember($member);
|
||||||
|
$alias = $column . '_' . ($depth - 1);
|
||||||
|
|
||||||
|
if (!\array_key_exists($alias, $result) || !isset($def['column'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$value = $result[$alias];
|
||||||
|
|
||||||
|
$path = $member;
|
||||||
|
if (\in_array($def['mapper']::$columns[$column]['type'], ['string', 'int', 'float', 'bool'])) {
|
||||||
|
\settype($value, $def['mapper']::$columns[$column]['type']);
|
||||||
|
} elseif ($def['mapper']::$columns[$column]['type'] === 'DateTime') {
|
||||||
|
$value = $value === null ? null : new \DateTime($value);
|
||||||
|
} elseif ($def['mapper']::$columns[$column]['type'] === 'Json') {
|
||||||
|
$value = \json_decode($value, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$obj = ArrayUtils::setArray($path, $obj, $value, '/', true);
|
||||||
|
}
|
||||||
|
|
||||||
return $obj;
|
return $obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2338,25 +2372,15 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
unset($keys[$key]);
|
unset($keys[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($keys) && $primaryKey !== null) {
|
if (!empty($keys) || $primaryKey === null) {
|
||||||
$countResulsts = \count($obj);
|
$dbData = self::getRaw($keys, $relations, $depth, $ref, $query);
|
||||||
|
foreach ($dbData as $row) {
|
||||||
|
$value = $row[static::$primaryField . '_' . $depth];
|
||||||
|
$obj[$value] = self::createBaseModel();
|
||||||
|
self::addInitialized(static::class, $value, $obj[$value]);
|
||||||
|
|
||||||
if ($countResulsts === 0) {
|
$obj[$value] = self::populateAbstract($row, $obj[$value], $depth);
|
||||||
return self::createNullModel();
|
|
||||||
} elseif ($countResulsts === 1) {
|
|
||||||
return \reset($obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
$dbData = self::getRaw($keys, $relations, $depth, $ref, $query);
|
|
||||||
foreach ($dbData as $row) {
|
|
||||||
$value = $row[static::$primaryField . '_' . $depth];
|
|
||||||
$obj[$value] = self::createBaseModel();
|
|
||||||
self::addInitialized(static::class, $value, $obj[$value]);
|
|
||||||
|
|
||||||
$obj[$value] = self::populateAbstract($row, $obj[$value], $depth);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self::fillRelations($obj, $relations, $depth - 1);
|
self::fillRelations($obj, $relations, $depth - 1);
|
||||||
|
|
@ -2514,6 +2538,12 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
{
|
{
|
||||||
$result = self::get(null, $relations, $depth);
|
$result = self::get(null, $relations, $depth);
|
||||||
|
|
||||||
|
if (\is_object($result)) {
|
||||||
|
if (\stripos(\get_class($result), '\Null') !== false) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return !\is_array($result) ? [$result] : $result;
|
return !\is_array($result) ? [$result] : $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2531,7 +2561,7 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
{
|
{
|
||||||
$result = self::getArray(null, $relations, $depth);
|
$result = self::getArray(null, $relations, $depth);
|
||||||
|
|
||||||
return !\is_array($result) ? [$result] : $result;
|
return !\is_array(\reset($result)) ? [$result] : $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -2577,6 +2607,12 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
{
|
{
|
||||||
$result = self::get(null, $relations, $depth, null, $query);
|
$result = self::get(null, $relations, $depth, null, $query);
|
||||||
|
|
||||||
|
if (\is_object($result)) {
|
||||||
|
if (\stripos(\get_class($result), '\Null') !== false) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return !\is_array($result) ? [$result] : $result;
|
return !\is_array($result) ? [$result] : $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3070,6 +3106,19 @@ class DataMapperAbstract implements DataMapperInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear cache
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public static function clearCache()
|
||||||
|
{
|
||||||
|
self::$initObjects = [];
|
||||||
|
self::$initArrays = [];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find database column name by member name
|
* Find database column name by member name
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -555,7 +555,7 @@ class Builder extends BuilderAbstract
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($columns as $column) {
|
foreach ($columns as $column) {
|
||||||
if (isset($operator[$i]) && !\in_array(\strtolower($operator[$i]), self::OPERATORS)) {
|
if (isset($operator[$i]) && !\in_array(\strtolower($operator[$i]), self::OPERATORS)) {
|
||||||
throw new \InvalidArgumentException('Unknown operator.');
|
throw new \InvalidArgumentException('Unknown operator: "' . $operator[$i] . '"');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->wheres[self::getPublicColumnName($column)][] = [
|
$this->wheres[self::getPublicColumnName($column)][] = [
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ class MysqlGrammar extends Grammar
|
||||||
$builder->select('*')
|
$builder->select('*')
|
||||||
->from('information_schema.columns')
|
->from('information_schema.columns')
|
||||||
->where('table_schema', '=', $query->getConnection()->getDatabase())
|
->where('table_schema', '=', $query->getConnection()->getDatabase())
|
||||||
->andWhere('table_name', '=' . $table);
|
->andWhere('table_name', '=', $table);
|
||||||
|
|
||||||
return \rtrim($builder->toSql(), ';');
|
return \rtrim($builder->toSql(), ';');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,11 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals($this->model->belongsToOne->string, $modelR->belongsToOne->string);
|
self::assertEquals($this->model->belongsToOne->string, $modelR->belongsToOne->string);
|
||||||
|
|
||||||
$for = ManyToManyDirectModelMapper::getFor($id, 'to');
|
$for = ManyToManyDirectModelMapper::getFor($id, 'to');
|
||||||
self::assertEquals(\reset($this->model->hasManyDirect)->string, \reset($for)->string);
|
|
||||||
|
self::assertEquals(
|
||||||
|
\reset($this->model->hasManyDirect)->string,
|
||||||
|
$for->string
|
||||||
|
);
|
||||||
|
|
||||||
self::assertCount(1, BaseModelMapper::getAll());
|
self::assertCount(1, BaseModelMapper::getAll());
|
||||||
}
|
}
|
||||||
|
|
@ -250,7 +254,10 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals($this->modelArray['belongsToOne']['string'], $modelR['belongsToOne']['string']);
|
self::assertEquals($this->modelArray['belongsToOne']['string'], $modelR['belongsToOne']['string']);
|
||||||
|
|
||||||
$for = ManyToManyDirectModelMapper::getForArray($id, 'to');
|
$for = ManyToManyDirectModelMapper::getForArray($id, 'to');
|
||||||
self::assertEquals(\reset($this->modelArray['hasManyDirect'])['string'], \reset($for)['string']);
|
self::assertEquals(
|
||||||
|
\reset($this->modelArray['hasManyDirect'])['string'],
|
||||||
|
\reset($for)['string']
|
||||||
|
);
|
||||||
|
|
||||||
self::assertCount(1, BaseModelMapper::getAllArray());
|
self::assertCount(1, BaseModelMapper::getAllArray());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,15 +46,15 @@ class BaseModelMapper extends DataMapperAbstract
|
||||||
*/
|
*/
|
||||||
protected static array $belongsTo = [
|
protected static array $belongsTo = [
|
||||||
'belongsToOne' => [
|
'belongsToOne' => [
|
||||||
'mapper' => BelongsToModelMapper::class,
|
'mapper' => BelongsToModelMapper::class,
|
||||||
'dest' => 'test_base_belongs_to_one',
|
'self' => 'test_base_belongs_to_one',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
protected static array $ownsOne = [
|
protected static array $ownsOne = [
|
||||||
'ownsOneSelf' => [
|
'ownsOneSelf' => [
|
||||||
'mapper' => OwnsOneModelMapper::class,
|
'mapper' => OwnsOneModelMapper::class,
|
||||||
'dest' => 'test_base_owns_one_self',
|
'self' => 'test_base_owns_one_self',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ namespace phpOMS\tests\Module;
|
||||||
require_once __DIR__ . '/../Autoloader.php';
|
require_once __DIR__ . '/../Autoloader.php';
|
||||||
|
|
||||||
use phpOMS\Application\ApplicationAbstract;
|
use phpOMS\Application\ApplicationAbstract;
|
||||||
|
use phpOMS\DataStorage\Database\RelationType;
|
||||||
use phpOMS\Event\EventManager;
|
use phpOMS\Event\EventManager;
|
||||||
use phpOMS\Message\Http\HttpRequest;
|
use phpOMS\Message\Http\HttpRequest;
|
||||||
use phpOMS\Message\Http\HttpResponse;
|
use phpOMS\Message\Http\HttpResponse;
|
||||||
|
|
@ -212,6 +213,8 @@ class ModuleAbstractTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
private function dbSetup() : void
|
private function dbSetup() : void
|
||||||
{
|
{
|
||||||
|
BaseModelMapper::clearCache();
|
||||||
|
|
||||||
$GLOBALS['dbpool']->get()->con->prepare(
|
$GLOBALS['dbpool']->get()->con->prepare(
|
||||||
'CREATE TABLE `test_base` (
|
'CREATE TABLE `test_base` (
|
||||||
`test_base_id` int(11) NOT NULL AUTO_INCREMENT,
|
`test_base_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user