coders/phind

Create, Ruin, Undo, Despair

Installs: 2

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/coders/phind

0.1.0 2025-10-19 18:37 UTC

This package is auto-updated.

Last update: 2025-12-19 19:14:17 UTC


README

Create, Ruin, Undo, Despair

A PHP library for data abstraction and query building that provides a unified interface for working with different data sources including SQL databases, NoSQL databases, and key-value stores.

Features

  • Data Source Abstraction: Support for multiple data sources (MySQL, NoSQL, Key-Value stores)
  • Query Builder: Fluent interface for building complex queries
  • Collection Management: Easy-to-use collection and entity management
  • Filtering & Sorting: Advanced filtering and sorting capabilities
  • Static Registry: Centralized management of data sources and collections

Installation

Install via Composer:

composer require coders/phind

Quick Start

Setting up a Data Source

use Coders\Phind\Sources;
use Coders\Phind\Sources\SourceConfig;

// Create a MySQL data source
$config = new SourceConfig([
    'driver' => 'mysql',
    'host' => 'localhost',
    'database' => 'mydb',
    'username' => 'user',
    'password' => 'pass'
]);

$source = Sources::create('main', $config);

Creating Collections

use Coders\Phind\Collections;

// Create collections for your entities
Collections::create($source, ['Users', 'Posts', 'Comments']);

// Get a collection
$users = Collections::get('Users');

Working with Entities

// Create a new entity
$user = $users->entity();
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->age = 30;

// Save the entity
$users->save($user);

// Retrieve entities by ID
$user = $users->get('user-id-123');
$multipleUsers = $users->get(['id1', 'id2', 'id3']);

Building Queries

use Coders\Phind\Query;
use Coders\Phind\Query\Filter;
use Coders\Phind\Query\SortAsc;
use Coders\Phind\Query\SortDesc;

// Create a query
$query = new Query('users');

// Add filters
$query->filter(new Filter('age', 18, Filter::GTE))
      ->filter(new Filter('status', 'active'));

// Add sorting
$query->sortBy(new SortAsc('name'))
      ->sortBy(new SortDesc('created_at'));

// Set limit and offset
$query->limit(10)
      ->offset(20);

// Select specific fields
$query->select(['id', 'name', 'email']);

// Execute the query
$results = $source->retrieve($query);

Advanced Filtering

use Coders\Phind\Query\AndFilters;
use Coders\Phind\Query\OrFilters;

// Create complex filter groups
$ageFilter = new Filter('age', 18, Filter::GTE);
$statusFilter = new Filter('status', ['active', 'premium'], Filter::IN);

$orGroup = new OrFilters();
$orGroup->add($ageFilter)->add($statusFilter);

$query->filter($orGroup);

Joining Queries

// Create related queries
$postsQuery = new Query('posts');
$postsQuery->filter(new Filter('published', true));

// Join with main query
$query->join($postsQuery);

Data Sources

The library supports multiple data source types:

  • MySQL: SQL-based relational database
  • NoSQL: Document-based databases
  • Key-Value: Simple key-value stores
  • Chain: Combine multiple data sources
  • StaticCache: In-memory caching layer

Query Operations

  • Filtering: Equal, not equal, greater than, less than, in, not in
  • Sorting: Ascending and descending order
  • Limiting: Pagination support with limit and offset
  • Joining: Combine data from multiple collections
  • Field Selection: Choose specific fields to retrieve

Requirements

  • PHP 8.0 or higher
  • Composer for dependency management

Development

Running Tests

./vendor/bin/phpunit tests/

Code Style

./vendor/bin/php-cs-fixer fix

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Author

Irek Kubicki - github@ixdude.com