- Added a new RelationTypeEnum

This commit is contained in:
Dave M. 2023-02-07 16:49:25 +00:00
parent 26ffecbb6e
commit 94edb09352
4 changed files with 24 additions and 8 deletions

View File

@ -7,7 +7,7 @@ use Ulmus\Attribute\Attribute;
#[\Attribute(\Attribute::TARGET_PROPERTY)] #[\Attribute(\Attribute::TARGET_PROPERTY)]
class Relation { class Relation {
public function __construct( public function __construct(
public string $type, public Relation\RelationTypeEnum|string $type,
public \Stringable|string|array $key = "", public \Stringable|string|array $key = "",
public null|\Closure $generateKey = null, public null|\Closure $generateKey = null,
public null|\Stringable|string|array $foreignKey = null, public null|\Stringable|string|array $foreignKey = null,
@ -29,7 +29,6 @@ class Relation {
$this->bridgeField = Attribute::handleArrayField($this->bridgeField); $this->bridgeField = Attribute::handleArrayField($this->bridgeField);
$this->bridgeForeignKey = Attribute::handleArrayField($this->bridgeForeignKey); $this->bridgeForeignKey = Attribute::handleArrayField($this->bridgeForeignKey);
$this->field = Attribute::handleArrayField($this->field); $this->field = Attribute::handleArrayField($this->field);
} }
public function entity() { public function entity() {
@ -55,17 +54,17 @@ class Relation {
public function isOneToOne() : bool public function isOneToOne() : bool
{ {
return $this->normalizeType() === 'onetoone'; return $this->type === Relation\RelationTypeEnum::oneToOne || $this->normalizeType() === 'onetoone';
} }
public function isOneToMany() : bool public function isOneToMany() : bool
{ {
return $this->normalizeType() === 'onetomany'; return $this->type === Relation\RelationTypeEnum::oneToMany || $this->normalizeType() === 'onetomany';
} }
public function isManyToMany() : bool public function isManyToMany() : bool
{ {
return $this->normalizeType() === 'manytomany'; return $this->type === Relation\RelationTypeEnum::manyToMany || $this->normalizeType() === 'manytomany';
} }
public function function() : string public function function() : string

View File

@ -0,0 +1,10 @@
<?php
namespace Ulmus\Attribute\Property\Relation;
enum RelationTypeEnum
{
case oneToOne;
case oneToMany;
case manyToMany;
}

View File

@ -12,7 +12,12 @@ class Where {
public mixed $value = null, public mixed $value = null,
public string $operator = Query\Where::OPERATOR_EQUAL, public string $operator = Query\Where::OPERATOR_EQUAL,
public string $condition = Query\Where::CONDITION_AND, public string $condition = Query\Where::CONDITION_AND,
public null|\Stringable|array $foreignField = null,
) { ) {
$this->field = Attribute::handleArrayField($field); $this->field = Attribute::handleArrayField($field);
if ($foreignField) {
$this->value = Attribute::handleArrayField($foreignField);
}
} }
} }

View File

@ -628,8 +628,10 @@ class Repository
$this->having(is_object($condition->field) ? $condition->field : $entity::field($condition->field), $condition->value, $condition->operator); $this->having(is_object($condition->field) ? $condition->field : $entity::field($condition->field), $condition->value, $condition->operator);
} }
foreach($this->entityResolver->searchFieldAnnotationList($item, [ Attribute\Property\Filter::class, Filter::class ] ) as $filter) { if ( empty($this->entityResolver->searchFieldAnnotationList($item, [ Attribute\Property\FilterJoin::class, FilterJoin::class ])) ) {
call_user_func_array([ $this->entityClass, $filter->method ], [ $this, $item, true ]); foreach ($this->entityResolver->searchFieldAnnotationList($item, [Attribute\Property\Filter::class, Filter::class]) as $filter) {
call_user_func_array([$this->entityClass, $filter->method], [$this, $item, true]);
}
} }
$this->close(); $this->close();
@ -700,7 +702,7 @@ class Repository
$repository = $entity::repository()->selectJsonEntity($entity, $alias)->open(); $repository = $entity::repository()->selectJsonEntity($entity, $alias)->open();
} }
# $relation->isManyToMany() and $repository->selectJsonEntity($relation->bridge, $relation->bridgeField, true); # @TODO ? $relation->isManyToMany() and $repository->selectJsonEntity($relation->bridge, $relation->bridgeField, true);
foreach($this->entityResolver->searchFieldAnnotationList($item, [ Attribute\Property\Where::class, Where::class ]) as $condition) { foreach($this->entityResolver->searchFieldAnnotationList($item, [ Attribute\Property\Where::class, Where::class ]) as $condition) {
$repository->where(is_object($condition->field) ? $condition->field : $entity::field($condition->field), $condition->value, $condition->operator); $repository->where(is_object($condition->field) ? $condition->field : $entity::field($condition->field), $condition->value, $condition->operator);