schorts/firestore-dao

A type-safe, domain-driven Data Access Object (DAO) abstraction for Google Cloud Firestore in PHP. Provides consistent CRUD operations, soft/hard delete support, criteria-based queries, and transaction-aware Unit of Work integration, built on top of the schorts/shared-kernel.

Maintainers

Package info

github.com/schorts99/firestore-dao-php

pkg:composer/schorts/firestore-dao

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-06-20 00:38 UTC

This package is auto-updated.

Last update: 2026-06-20 00:40:02 UTC


README

A type‑safe, domain‑driven Data Access Object (DAO) abstraction for Google Cloud Firestore in PHP.

Provides consistent CRUD operations, soft/hard delete support, criteria‑based queries, and transaction‑aware Unit of Work integration, built on top of the schorts/shared‑kernel.

🚀 Installation

composer require schorts/firestore-dao

⚙️ Usage Example

Basic DAO

use Schorts\FirestoreDAO\FirestoreDAO;
use Schorts\SharedKernel\DAO\DeleteMode;

final class UserDAO extends FirestoreDAO
{
  // Extend with domain-specific methods if needed
}

CRUD Operations

$userDao = new UserDAO($firestore->collection('users'), DeleteMode::SOFT);

// Create
$userDao->create($user);

// Find
$found = $userDao->findByID($user->getId()->getValue());

// Update
$userDao->update($user);

// Delete (soft delete by default)
$userDao->delete($user);

// Restore
$userDao->restore($user);

🔄 Transaction Support

$firestore->runTransaction(function ($transaction) use ($userDao) {
  $uow = new \Schorts\FirestoreDAO\UnitOfWork\FirestoreTransactionUnitOfWork($transaction);

  $user = $userDao->findByID('123', $uow);
  $user->setName('Updated Name');

  $userDao->update($user, $uow);
});

🗂 Features

  • Soft delete with is_deleted and deleted_at fields.
  • Hard delete for permanent removal.
  • Criteria queries with filters, ordering, limits, offsets.
  • Geospatial queries using Vincenty distance calculation.
  • Unit of Work integration for transaction‑aware operations.
  • Consistent contract across DAOs in different backends.

📖 License

LGPL-3.0-or-later