DatabaseCategoryRepository
in package
implements
ICategoryRepository
uses
ManagesTimestamps
Database-backed category repository using ORM.
Works with SQLite, MySQL, and PostgreSQL via the Neuron ORM.
Table of Contents
Interfaces
- ICategoryRepository
- Category repository interface.
Properties
- $_pdo : PDO
Methods
- __construct() : mixed
- Constructor
- __sleep() : array<string|int, mixed>
- Handle serialization for PHPUnit process isolation
- __wakeup() : void
- Handle unserialization for PHPUnit process isolation
- all() : array<string|int, Category>
- Get all categories
- allWithPostCount() : array<string|int, mixed>
- Get categories with post count
- count() : int
- Count total categories
- create() : Category
- Create a new category
- delete() : bool
- Delete a category
- findById() : Category|null
- Find category by ID
- findByIds() : array<string|int, Category>
- Find multiple categories by IDs
- findByName() : Category|null
- Find category by name
- findBySlug() : Category|null
- Find category by slug
- update() : bool
- Update an existing category
- createEntity() : T
- Prepare entity for creation by setting timestamps, saving, and refreshing
- ensureTimestamps() : void
- Set created_at and updated_at timestamps if not already set
- saveAndRefresh() : T
- Save entity and return the refreshed version from database
Properties
$_pdo
private
PDO
$_pdo
Methods
__construct()
Constructor
public
__construct(SettingManager $settings) : mixed
Parameters
- $settings : SettingManager
-
Settings manager with database configuration
Tags
__sleep()
Handle serialization for PHPUnit process isolation
public
__sleep() : array<string|int, mixed>
Return values
array<string|int, mixed>__wakeup()
Handle unserialization for PHPUnit process isolation
public
__wakeup() : void
all()
Get all categories
public
all() : array<string|int, Category>
Return values
array<string|int, Category>allWithPostCount()
Get categories with post count
public
allWithPostCount() : array<string|int, mixed>
Return values
array<string|int, mixed> —Array of ['category' => Category, 'post_count' => int]
count()
Count total categories
public
count() : int
Return values
intcreate()
Create a new category
public
create(Category $category) : Category
Parameters
- $category : Category
Return values
Categorydelete()
Delete a category
public
delete(int $id) : bool
Parameters
- $id : int
Return values
boolfindById()
Find category by ID
public
findById(int $id) : Category|null
Parameters
- $id : int
Return values
Category|nullfindByIds()
Find multiple categories by IDs
public
findByIds(array<string|int, mixed> $ids) : array<string|int, Category>
Parameters
- $ids : array<string|int, mixed>
-
Array of category IDs
Return values
array<string|int, Category>findByName()
Find category by name
public
findByName(string $name) : Category|null
Parameters
- $name : string
Return values
Category|nullfindBySlug()
Find category by slug
public
findBySlug(string $slug) : Category|null
Parameters
- $slug : string
Return values
Category|nullupdate()
Update an existing category
public
update(Category $category) : bool
Parameters
- $category : Category
Return values
boolcreateEntity()
Prepare entity for creation by setting timestamps, saving, and refreshing
protected
createEntity(T $entity, callable $finder, string $entityType) : T
This combines the common pattern of:
- Setting timestamps if not already set
- Saving the entity
- Re-fetching from database to get all DB-generated values
Use this in create() methods after performing duplicate checks.
Parameters
- $entity : T
-
Entity to create
- $finder : callable
-
Callback to find entity by ID: function(int $id): ?T
- $entityType : string
-
Human-readable entity type for error messages
Tags
Return values
T —The refreshed entity from database
ensureTimestamps()
Set created_at and updated_at timestamps if not already set
protected
ensureTimestamps(object $entity) : void
Parameters
- $entity : object
-
Entity with getCreatedAt/setCreatedAt and getUpdatedAt/setUpdatedAt methods
saveAndRefresh()
Save entity and return the refreshed version from database
protected
saveAndRefresh(T $entity, callable $finder, string $entityType) : T
Ensures the returned entity has all database-generated values. Throws an exception if the entity cannot be found after save.
Parameters
- $entity : T
-
Entity to save
- $finder : callable
-
Callback to find entity by ID: function(int $id): ?T
- $entityType : string
-
Human-readable entity type for error messages
Tags
Return values
T —The refreshed entity from database