- 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
{
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 {
$position = "FIRST";

View File

@ -3,13 +3,20 @@
namespace Ulmus\Attribute;
use Ulmus\Common\EntityField;
use Ulmus\Repository;
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) ) {
$class = array_shift($field);
$field[1] ??= $alias;
if (is_array($field[0])) {
$field[] = $separator;
return $class::fields(...$field);
}
return $class::field(...$field);
}

View File

@ -10,6 +10,17 @@ use Ulmus\Attribute\Attribute;
*/
#[\Attribute(\Attribute::TARGET_PROPERTY)]
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 ? string $name = null,
public ? string $type = 'bigint',
@ -22,8 +33,11 @@ class ForeignKey extends PrimaryKey {
public bool $nullable = false,
public mixed $default = null,
public bool $readonly = false,
public null|array|string|\Stringable $foreignKey = "",
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;
class EntityCollection extends \ArrayObject {
class EntityCollection extends \ArrayObject implements \JsonSerializable {
public ? string $entityClass = null;
@ -340,6 +340,11 @@ class EntityCollection extends \ArrayObject {
return ( new $className() )->fromArray($dataset);
}
public function jsonSerialize(): mixed
{
return $this->toArray();
}
public function append($value) : void
{
if ( is_array($value) ) {

View File

@ -301,15 +301,15 @@ trait EntityTrait {
}
#[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]
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);
}, $fields));
}