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
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.89
- phpunit/phpunit: ^12.4
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