diff --git a/src/Alias/Model.php b/src/Alias/Model.php index b96b4c2..ea3dd91 100644 --- a/src/Alias/Model.php +++ b/src/Alias/Model.php @@ -61,4 +61,8 @@ abstract class Model implements ModelInterface } $this->isDirty(); } + public function delete(): void + { + $this->getFactory()->get(get_class($this))->delete($this); + } } diff --git a/src/Alias/Model/Repository.php b/src/Alias/Model/Repository.php index 69767b3..084493a 100644 --- a/src/Alias/Model/Repository.php +++ b/src/Alias/Model/Repository.php @@ -100,6 +100,12 @@ abstract class Repository implements RepositoryInterface } return $model; } + public function delete(Model $model): void + { + $query = $this->getQueryBuilder()->delete($this->getTable())->where(['id = ?']); + $this->getConnection()->execute($query, [$model->getId()]); + } + public function fetchById(int $id): Model { $query = $this->getQueryBuilder() diff --git a/src/Concept/Model.php b/src/Concept/Model.php index d6f836d..d58d7ce 100644 --- a/src/Concept/Model.php +++ b/src/Concept/Model.php @@ -15,4 +15,5 @@ interface Model public function isDirty(): bool; public function save(): void; public function edit(array $data): void; + public function delete(): void; } diff --git a/src/Concept/Model/Factory.php b/src/Concept/Model/Factory.php index d92b166..8e1f566 100644 --- a/src/Concept/Model/Factory.php +++ b/src/Concept/Model/Factory.php @@ -7,7 +7,5 @@ interface Factory { public function setContainer(ContainerInterface $container): Factory; public function getContainer(): ContainerInterface; - public function setNamespace(string $namespace): Factory; - public function getNamespace(): string; - public function get(string $repository_name): Repository; + public function get(string $repository_class): Repository; } diff --git a/src/Concept/Model/Repository.php b/src/Concept/Model/Repository.php index 9e5c9b9..c31de6a 100644 --- a/src/Concept/Model/Repository.php +++ b/src/Concept/Model/Repository.php @@ -23,6 +23,7 @@ interface Repository public function save(Model $model): void; public function edit(Model $model, array $data): Model; public function create(array $data): Model; + public function delete(Model $model): void; public function fetchById(int $id): Model; public function fetchAll(): array; } diff --git a/src/Implement/Model/Factory.php b/src/Implement/Model/Factory.php index c5472f9..c172593 100644 --- a/src/Implement/Model/Factory.php +++ b/src/Implement/Model/Factory.php @@ -22,25 +22,8 @@ class Factory implements FactoryInterface { return $this->container; } - protected string $namespace; - public function setNamespace(string $namespace): FactoryInterface + public function get(string $repository_class): Repository { - $this->namespace = $namespace; - return $this; - } - public function getNamespace(): string - { - return $this->namespace; - } - protected function buildRepository(string $repository_name): string - { - return implode("\\", [ - $this->getNamespace(), - $repository_name - ]); - } - public function get(string $repository_name): Repository - { - return $this->getContainer()->get($this->buildRepository($repository_name)); + return $this->getContainer()->get($repository_class); } }