- 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)]
class Relation {
public function __construct(
public string $type,
public Relation\RelationTypeEnum|string $type,
public \Stringable|string|array $key = "",
public null|\Closure $generateKey = null,
public null|\Stringable|string|array $foreignKey = null,
@ -29,7 +29,6 @@ class Relation {
$this->bridgeField = Attribute::handleArrayField($this->bridgeField);
$this->bridgeForeignKey = Attribute::handleArrayField($this->bridgeForeignKey);
$this->field = Attribute::handleArrayField($this->field);
}
public function entity() {
@ -55,17 +54,17 @@ class Relation {
public function isOneToOne() : bool
{
return $this->normalizeType() === 'onetoone';
return $this->type === Relation\RelationTypeEnum::oneToOne || $this->normalizeType() === 'onetoone';
}
public function isOneToMany() : bool
{
return $this->normalizeType() === 'onetomany';
return $this->type === Relation\RelationTypeEnum::oneToMany || $this->normalizeType() === 'onetomany';
}
public function isManyToMany() : bool
{
return $this->normalizeType() === 'manytomany';
return $this->type === Relation\RelationTypeEnum::manyToMany || $this->normalizeType() === 'manytomany';
}
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 string $operator = Query\Where::OPERATOR_EQUAL,
public string $condition = Query\Where::CONDITION_AND,
public null|\Stringable|array $foreignField = null,
) {
$this->field = Attribute::handleArrayField($field);
if ($foreignField) {
$this->value = Attribute::handleArrayField($foreignField);
}
}
}

View File

@ -628,9 +628,11 @@ class Repository
$this->having(is_object($condition->field) ? $condition->field : $entity::field($condition->field), $condition->value, $condition->operator);
}
if ( empty($this->entityResolver->searchFieldAnnotationList($item, [ Attribute\Property\FilterJoin::class, FilterJoin::class ])) ) {
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();
@ -700,7 +702,7 @@ class Repository
$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) {
$repository->where(is_object($condition->field) ? $condition->field : $entity::field($condition->field), $condition->value, $condition->operator);