- Some small bugfixes made

This commit is contained in:
Dave M. 2023-07-09 12:38:52 -04:00
parent a4743b471c
commit 01ab6e82d4
6 changed files with 55 additions and 8 deletions

View File

@ -104,7 +104,7 @@ trait DefaultAdapterTrait
public function generateAlterColumn(FieldDefinition $definition, array $field) : string|\Stringable public function generateAlterColumn(FieldDefinition $definition, array $field) : string|\Stringable
{ {
if ($field['previous']) { if ($field['previous']) {
$position = sprintf('AFTER %s', $adapter->escapeIdentifier($field['previous']['field'], AdapterInterface::IDENTIFIER_FIELD)); $position = sprintf('AFTER %s', $this->escapeIdentifier($field['previous']['field'], AdapterInterface::IDENTIFIER_FIELD));
} }
else { else {
$position = "FIRST"; $position = "FIRST";

View File

@ -3,13 +3,20 @@
namespace Ulmus\Attribute; namespace Ulmus\Attribute;
use Ulmus\Common\EntityField; use Ulmus\Common\EntityField;
use Ulmus\Repository;
class Attribute class Attribute
{ {
public static function handleArrayField(null|\Stringable|string|array $field) : mixed public static function handleArrayField(null|\Stringable|string|array $field, null|string|bool $alias = Repository::DEFAULT_ALIAS, string $separator = ', ') : mixed
{ {
if ( is_array($field) ) { if ( is_array($field) ) {
$class = array_shift($field); $class = array_shift($field);
$field[1] ??= $alias;
if (is_array($field[0])) {
$field[] = $separator;
return $class::fields(...$field);
}
return $class::field(...$field); return $class::field(...$field);
} }

View File

@ -10,6 +10,17 @@ use Ulmus\Attribute\Attribute;
*/ */
#[\Attribute(\Attribute::TARGET_PROPERTY)] #[\Attribute(\Attribute::TARGET_PROPERTY)]
class ForeignKey extends PrimaryKey { class ForeignKey extends PrimaryKey {
public const SET_NULL = "null";
public const SET_DEFAULT = "default";
public const RESTRICT = "restrict";
public const NO_ACTION = "noaction";
public const CASCADE = "cascade";
public function __construct( public function __construct(
public ? string $name = null, public ? string $name = null,
public ? string $type = 'bigint', public ? string $type = 'bigint',
@ -22,8 +33,11 @@ class ForeignKey extends PrimaryKey {
public bool $nullable = false, public bool $nullable = false,
public mixed $default = null, public mixed $default = null,
public bool $readonly = false, public bool $readonly = false,
public null|array|string|\Stringable $foreignKey = "",
public null|array|string|\Stringable $references = null, public null|array|string|\Stringable $references = null,
public null|string $onDelete = self::NO_ACTION,
public null|string $onUpdate = self::NO_ACTION,
) { ) {
$this->references = Attribute::handleArrayField($this->references); $this->references = Attribute::handleArrayField($this->references, false);
} }
} }

View File

@ -0,0 +1,21 @@
<?php
namespace Ulmus\Attribute\Property;
#[\Attribute(\Attribute::TARGET_PROPERTY)]
class Index {
public const TYPE_PRIMARY = 'primary';
public const TYPE_INDEX = 'index';
public const TYPE_UNIQUE = 'unique';
public const TYPE_SPATIAL = 'spatial';
public const TYPE_FULLTEXT = 'fulltext';
public function __construct(
public string $type = self::TYPE_INDEX,
) {}
}

View File

@ -4,7 +4,7 @@ namespace Ulmus;
use Generator; use Generator;
class EntityCollection extends \ArrayObject { class EntityCollection extends \ArrayObject implements \JsonSerializable {
public ? string $entityClass = null; public ? string $entityClass = null;
@ -340,6 +340,11 @@ class EntityCollection extends \ArrayObject {
return ( new $className() )->fromArray($dataset); return ( new $className() )->fromArray($dataset);
} }
public function jsonSerialize(): mixed
{
return $this->toArray();
}
public function append($value) : void public function append($value) : void
{ {
if ( is_array($value) ) { if ( is_array($value) ) {

View File

@ -301,15 +301,15 @@ trait EntityTrait {
} }
#[Ignore] #[Ignore]
public static function field($name, ? string $alias = Repository::DEFAULT_ALIAS) : EntityField public static function field($name, null|string|bool $alias = Repository::DEFAULT_ALIAS) : EntityField
{ {
return new EntityField(static::class, $name, $alias ? Ulmus::repository(static::class)->adapter->adapter()->escapeIdentifier($alias, Adapter\AdapterInterface::IDENTIFIER_FIELD) : Repository::DEFAULT_ALIAS, Ulmus::resolveEntity(static::class)); return new EntityField(static::class, $name, $alias ? Ulmus::repository(static::class)->adapter->adapter()->escapeIdentifier($alias, Adapter\AdapterInterface::IDENTIFIER_FIELD) : ( $alias === false ? '' : Repository::DEFAULT_ALIAS ), Ulmus::resolveEntity(static::class));
} }
#[Ignore] #[Ignore]
public static function fields(array $fields, ? string $alias = Repository::DEFAULT_ALIAS) : string public static function fields(array $fields, null|string|bool $alias = Repository::DEFAULT_ALIAS, string $separator = ', ') : string
{ {
return implode(', ', array_map(function($item) use ($alias){ return implode($separator, array_map(function($item) use ($alias){
return static::field($item, $alias); return static::field($item, $alias);
}, $fields)); }, $fields));
} }