diff --git a/src/Entity/Mssql/Column.php b/src/Entity/Mssql/Column.php index b51723d..c4fe6a1 100644 --- a/src/Entity/Mssql/Column.php +++ b/src/Entity/Mssql/Column.php @@ -2,11 +2,23 @@ namespace Ulmus\Entity\Mssql; +use Ulmus\Attribute\Obj\Table as TableObj; use Ulmus\Attribute\Property\Field; +use Ulmus\ConnectionAdapter; use Ulmus\Entity\Mysql\id; +use Ulmus\Repository; +use Ulmus\Ulmus; +#[TableObj(name: "columns", schema: "information_schema")] class Column extends \Ulmus\Entity\InformationSchema\Column { + /* + public static function repository(string $alias = Repository::DEFAULT_ALIAS, ConnectionAdapter $adapter = null): Repository + { + $adapter = Ulmus::$registeredAdapters[$this->loadedFromAdapter]; + + return Ulmus::repository(static::class, $alias, $adapter); + }*/ # TODO ! Handle FUNCTIONAL default value protected function canHaveDefaultValue(): bool diff --git a/src/Entity/Mssql/Table.php b/src/Entity/Mssql/Table.php index 2014f71..a791c88 100644 --- a/src/Entity/Mssql/Table.php +++ b/src/Entity/Mssql/Table.php @@ -5,13 +5,22 @@ namespace Ulmus\Entity\Mssql; use Ulmus\EntityCollection, Ulmus\Entity\Field\Datetime; -use Ulmus\{Attribute\Obj\Table as TableObj,}; +use Ulmus\{Attribute\Obj\Table as TableObj, Ulmus}; use Ulmus\Attribute\Property\{Field, Filter, FilterJoin, Relation, Join, Virtual, Where}; +use Ulmus\Repository; -#[TableObj(name: "tables", database: "information_schema")] +#[TableObj(name: "tables", schema: "information_schema")] class Table extends \Ulmus\Entity\InformationSchema\Table { #[Relation(type: "oneToMany", key: "name", foreignKey: [ Column::class, 'tableName' ], entity: Column::class)] #[Where('TABLE_SCHEMA', generateValue: [ Table::class, 'getSchema' ])] + ##[Filter(method: "filterColumns")] public EntityCollection $columns; + + public function filterColumns() : Repository + { + $adapter = Ulmus::$registeredAdapters[$this->loadedFromAdapter]; + + return Column::repository(Repository\MssqlRepository::DEFAULT_ALIAS, $adapter); + } } \ No newline at end of file diff --git a/src/Repository.php b/src/Repository.php index 6b7acaf..25c510f 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -6,6 +6,7 @@ use Ulmus\Attribute\Property\{ Field, OrderBy, Where, Having, Relation, Filter, Join, FilterJoin, WithJoin }; use Psr\SimpleCache\CacheInterface; +use Ulmus\Adapter\AdapterInterface; use Ulmus\Common\EntityResolver; use Ulmus\Entity\EntityInterface; use Ulmus\Repository\RepositoryInterface; @@ -25,7 +26,7 @@ class Repository implements RepositoryInterface public ? ConnectionAdapter $adapters; - public readonly QueryBuilder\QueryBuilderInterface $queryBuilder; + public QueryBuilder\QueryBuilderInterface $queryBuilder; protected EntityResolver $entityResolver; @@ -36,6 +37,11 @@ class Repository implements RepositoryInterface $this->alias = $alias; $this->entityResolver = Ulmus::resolveEntity($entity); + $this->setAdapter($adapter); + } + + public function setAdapter(? ConnectionAdapter $adapter = null) : void { + if ($adapter) { $this->adapter = $adapter; diff --git a/src/Repository/RelationBuilder.php b/src/Repository/RelationBuilder.php index cb69b3f..94b25b4 100644 --- a/src/Repository/RelationBuilder.php +++ b/src/Repository/RelationBuilder.php @@ -264,7 +264,7 @@ class RelationBuilder { $relation->entity ??= $this->resolver->reflectedClass->getProperties()[$name]->getTypes()[0]->type; - $this->repository = $relation->entity::repository(); + $this->repository ??= $relation->entity::repository(); $this->applyWhere(); @@ -282,7 +282,7 @@ class RelationBuilder if (isset($value)) { #$this->repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $relation->entity::field($relation->foreignKey), $value ); - $this->repository->where( $relation->foreignKey($this->repository), $value ); + $this->repository->where($relation->foreignKey($this->repository), $value); } else { $this->repository->where(Sql::raw('TRUE'), Sql::raw('FALSE')); @@ -296,7 +296,7 @@ class RelationBuilder { extract($this->relationAnnotations($name, $relation)); - $this->repository = $relationRelation->entity::repository(); + $this->repository ??= $relationRelation->entity::repository(); $bridgeAlias = $relation->bridgeField ?? uniqid("bridge_");