companue / shared-utilities
Shared utilities, traits, and helpers for Companue service packages including ordering, timestamping, and common model behaviors
1.0.2
2026-06-19 14:02 UTC
Requires
- php: ^8.1
- illuminate/database: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2026-06-19 14:03:33 UTC
README
Shared utilities, traits, and helpers for Companue service packages.
Features
- Orderable Trait: Easy ordering/ranking capabilities for Eloquent models
- Handles unique constraint conflicts with two-pass approach
- Built-in scopes for querying ordered data
- Bulk and single-item reordering support
Installation
composer require companue/shared-utilities
Usage
Request Timing Middleware
This package ships a shared request timing middleware that can be used across Laravel services.
- Add the middleware to your application's global HTTP middleware stack in
app/Http/Kernel.php:
\Companue\SharedUtilities\Http\Middleware\LogRequestTiming::class,
- Use the environment key to enable or disable logging:
LOG_REQUEST_TIMING=true
- Optionally publish the package config if you want to customize it locally:
php artisan vendor:publish --tag=config
Orderable Trait
Use the trait in your model:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Companue\SharedUtilities\Traits\Orderable; class Joblevel extends Model { use Orderable; public function orderingAttr(): string { return 'priority'; // Your ordering column } }
Available Methods
ordered()- Scope to order query resultsorderedDesc()- Scope to reverse ordergetOrderingValue()- Get the ordering valuesetOrderingValue($value)- Set the ordering valuereorderBatch(array $items)- Bulk reorder with unique constraint handlingreorderSingle($id, $position)- Move single item and shift othersgetNextOrderingValue()- Get next available position
Example
// Get ordered items $items = Joblevel::ordered()->get(); // Reorder multiple items Joblevel::reorderBatch([ ['id' => 1, 'priority' => 1], ['id' => 2, 'priority' => 2], ['id' => 3, 'priority' => 3], ]); // Move single item Joblevel::reorderSingle(5, 2); // Move item 5 to position 2
License
MIT