public getStorageReflection ( ) : Nextras\Orm\StorageReflection\IStorageReflection | ||
return | Nextras\Orm\StorageReflection\IStorageReflection |
private function fetchCounts(SqlBuilder $builder, array $values) { $targetStoragePrimaryKey = $this->targetMapper->getStorageReflection()->getStoragePrimaryKey()[0]; $builder = clone $builder; $table = $builder->getTableName(); $builder->addSelect("{$table}.{$this->joinStorageKey}"); $builder->addSelect("COUNT({$table}.{$targetStoragePrimaryKey}) AS count"); $builder->addWhere("{$table}.{$this->joinStorageKey}", $values); $builder->setGroup("{$table}.{$this->joinStorageKey}"); $builder->setOrder([], []); $result = $this->context->queryArgs($builder->buildSelectQuery(), $builder->getParameters()); $counts = []; foreach ($result->fetchAll() as $row) { $counts[$row->{$this->joinStorageKey}] = $row['count']; } return $counts; }
private function parseCondition(array $levels, IMapper $mapper) { /** @var IDbStorageReflection $reflection */ $reflection = $mapper->getStorageReflection(); $expression = ''; $column = array_pop($levels); $entityMD = $this->metadataStorage->get($mapper->getRepository()->getEntityClassNames()[0]); foreach ($levels as $level) { if (!$entityMD->hasProperty($level)) { throw new InvalidArgumentException("Undefined property {$entityMD->className}::\${$level}."); } $propertyMD = $entityMD->getProperty($level); if (!$propertyMD->relationshipRepository) { throw new InvalidArgumentException("Entity {$entityMD->className}::\${$level} does not contain a relationship."); } $targetMapper = $this->model->getRepository($propertyMD->relationshipRepository)->getMapper(); $targetReflection = $targetMapper->getStorageReflection(); if ($propertyMD->relationshipType === PropertyMetadata::RELATIONSHIP_ONE_HAS_MANY) { $table = $targetReflection->getStorageName(); $joinColumn = $targetReflection->convertEntityToStorageKey($propertyMD->relationshipProperty); $expression .= ":{$table}({$joinColumn})"; } elseif ($propertyMD->relationshipType === PropertyMetadata::RELATIONSHIP_MANY_HAS_MANY) { if ($propertyMD->relationshipIsMain) { $expression .= ':' . $reflection->getManyHasManyStorageName($targetMapper); $expression .= '.' . $reflection->getManyHasManyStoragePrimaryKeys($targetMapper)[1]; } else { $expression .= ':' . $targetReflection->getManyHasManyStorageName($mapper); $expression .= '.' . $targetReflection->getManyHasManyStoragePrimaryKeys($mapper)[0]; } } else { $expression .= '.' . $reflection->convertEntityToStorageKey($level); } $mapper = $targetMapper; $reflection = $targetReflection; $entityMD = $this->metadataStorage->get($mapper->getRepository()->getEntityClassNames()[0]); } // check if property exists $entityMD->getProperty($column); $column = $reflection->convertEntityToStorageKey($column); return "{$expression}.{$column}"; }
public function __construct(IMapper $targetMapper, PropertyMetadata $metadata) { $this->metadata = $metadata; $this->joinStorageKey = $targetMapper->getStorageReflection()->convertEntityToStorageKey($this->metadata->relationship->property); }
public function getManyHasManyStoragePrimaryKeys(IMapper $target) { $one = $this->getStoragePrimaryKey()[0]; $two = $target->getStorageReflection()->getStoragePrimaryKey()[0]; if ($one !== $two) { return [$one, $two]; } return $this->findManyHasManyPrimaryColumns($this->getManyHasManyStorageName($target), $this->getStorageName(), $target->getTableName()); }