spiral/cycle-bridge
Bridge package integrating Cycle ORM v2 with Spiral Framework 3+. Provides ORM configuration and runtime wiring for Spiral apps using PDO database drivers on PHP 8.1+.
@roxblnfk) introduces optimized N+1 query resolution for Cycle ORM within Spiral, aligning with Spiral’s performance-first ethos. This complements Spiral’s existing data loading optimizations (e.g., Spiral\DataLoader) and reduces redundant database queries in complex entity graphs.EntityRelationsLoaded), enabling cross-cutting concerns like logging or caching.@ManyToMany, @HasMany). Teams using dynamic relations (e.g., polymorphic) may need runtime overrides.$this->bind(Cycle\ORM\Repository\RepositoryInterface::class, \Spiral\CycleBridge\Repository::class);
assertRelationsLoaded()), improving Spiral’s Pest/PhpUnit test coverage for ORM interactions.spiral/profiler).@ManyToMany(loader: RelationsBulkLoader::class)).composer require cycle/orm:^2.10 spiral/cycle-bridge:^2.13
$entity->getManyToMany()->load()).$repository->findWith('relations')).save())?cycle:dump-schema)?composer require spiral/cycle-bridge:^2.13 cycle/orm:^2.10
config/modules.php:
Spiral\CycleBridge\CycleBridgeModule::class,
RelationsBulkLoaderInterface.EntityRelationsLoaded events for post-load logic:
$this->listen(EntityRelationsLoaded::class, fn ($event) => $this->cache->set(...));
User with Orders).ProductVariant).@ManyToMany(loader: RelationsBulkLoader::class).load() calls.loader->setBatchSize(50)) based on benchmarks.Spiral\DataLoader, clarify whether to replace or complement it with Cycle’s bulk loader.DataLoader for external APIs + RelationsBulkLoader for internal ORM).spatie/laravel-activitylog). Replace with Cycle ORM equivalents.spiral/testing) for bulk loader support in assertions.@Inject and Cycle’s @ManyToMany(loader: ...). Use namespace aliases if needed.| Step | Task | Dependencies | Owner | Notes |
|---|---|---|---|---|
| 1 | Update composer.json |
- | DevOps | Pin cycle/orm:^2.10 |
| 2 | Enable CycleBridge Module | config/modules.php |
Backend | Add Spiral\CycleBridge\CycleBridgeModule::class |
| 3 | Benchmark bulk loader | Spiral profiler | Perf Team | Compare vs. manual loading |
| 4 | Migrate 1-2 entities | Cycle ORM annotations | Backend | Add @ManyToMany(loader: ...) |
| 5 | Update tests | Spiral/Pest | QA | Add assertRelationsLoaded() |
| 6 | Enable globally | DI container | Backend | Set default loader |
| 7 | Deprecate manual loading | Feature flags | Backend | Add @deprecated to load() |
| 8 | Monitor memory usage | Spiral metrics | DevOps | Watch for leaks |
config/cycle.php:
'debug' => env('APP_DEBUG', true),
'logger' => Spiral\CycleBridge\Logger::class,
How can I help you explore Laravel packages today?