phrity/comparison
Lightweight PHP interfaces and a helper trait for object comparisons. Implement Equalable/Comparable (or just compare() via ComparisonTrait) to get equals/greater/less helpers, plus a Comparator utility for sorting and filtering. Compatible with PHP 7.1+.
Equalable/Comparable interfaces enable consistent comparison semantics across Laravel domain models (e.g., User, Product, Order), reducing ad-hoc logic in business layers.Comparator), making it reusable in APIs, admin panels, and background jobs.User::equals() for uniqueness checks) and Collections (e.g., custom sorting via Comparator).ComparisonTrait minimizes boilerplate for developers, encouraging adoption without enforcing it globally.ORDER BY clauses), requiring manual SQL or Query Builder extensions.User->address->city), necessitating custom logic or composition.retrieved, saved) to auto-apply comparisons.class User implements Comparable).Illuminate\Support\Collection to use Comparator for sorting/filtering (e.g., Collection::compare()).Route::get('/products', [Comparator::class, 'sort'])).ComparisonTrait in critical models (e.g., Product, Order).usort/array_filter with Comparator in services.Collection::whereGreaterThan()).IncomparableException improvements).Comparator storage).usort, ORDER BY).Comparator may introduce overhead for large datasets (e.g., 10K+ items). Benchmark against usort/array_filter.null handling, nested objects) requires explicit IncomparableException management.ORDER BY/WHERE clauses forces manual SQL or Query Builder extensions.Comparable").Comparator or trait adoption first.Comparator vs. native PHP/DB operations?Comparator integrate with Collections, Query Builder, or both?IncomparableException be logged/handled? (e.g., Sentry, custom middleware).User->orders->items)?Comparator usage?Comparable or ComparisonTrait for domain objects (e.g., User, Product).Illuminate\Support\Collection to integrate Comparator:
Collection::macro('compare', function ($comparables, $condition) {
return (new Comparator($comparables))->equals($condition);
});
Comparator in controllers/services for dynamic sorting/filtering:
$sortedProducts = (new Comparator($products))->sort();
return response()->json($sortedProducts);
Comparator for background processing (e.g., ranking users).usort, array_filter, custom methods).ComparisonTrait in 1–2 critical models (e.g., Product, Order).usort/array_filter with Comparator in a service.Collection::whereGreaterThan()).Comparable in new models via team guidelines or static analysis (e.g., PHPStan).Comparator vs. native PHP/DB operations for large datasets.ComparisonTrait for nested object support if needed.IncomparableException improvements).illuminate/support for Collection macros.Comparable/ComparisonTrait in domain models (e.g., User, Product).Comparator.compare(), whereGreaterThan()).whereEquals()) if database comparisons are needed.Comparator with edge cases (e.g., null, nested objects).ComparisonTrait eliminates repetitive equals()/compare() implementations.Comparator consolidates sorting/filtering rules in one place.ComparisonTrait may increase class complexity.phrity/comparison would require rewrites.How can I help you explore Laravel packages today?