Compare commits
	
		
			2 Commits
		
	
	
		
			dcccce7893
			...
			d4a9fc8463
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d4a9fc8463 | |||
| 94edb09352 | 
@ -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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								src/Attribute/Property/Relation/RelationTypeEnum.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/Attribute/Property/Relation/RelationTypeEnum.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Ulmus\Attribute\Property\Relation;
 | 
			
		||||
 | 
			
		||||
enum RelationTypeEnum
 | 
			
		||||
{
 | 
			
		||||
    case oneToOne;
 | 
			
		||||
    case oneToMany;
 | 
			
		||||
    case manyToMany;
 | 
			
		||||
}
 | 
			
		||||
@ -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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -628,8 +628,10 @@ class Repository
 | 
			
		||||
                    $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) {
 | 
			
		||||
                    call_user_func_array([ $this->entityClass, $filter->method ], [ $this, $item, true ]);
 | 
			
		||||
                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);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user