cycle / active-record
Provides a simple way to work with your database using Active Record pattern and Cycle ORM
Fund package maintenance!
cycle
Requires
- php: ^8.2
- cycle/orm: ^2.7
- psr/container: ^2.0
Requires (Dev)
- buggregator/trap: ^1.5
- cycle/entity-behavior: ^1.3
- ergebnis/composer-normalize: ^2.42
- ergebnis/phpunit-slow-test-detector: ^2.14
- illuminate/support: ^10.48 || ^11.0
- mockery/mockery: ^1.6
- pestphp/pest: ^2.34
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^10.5
- psalm/plugin-phpunit: ~0.19.0
- rector/rector: ^1.0
- roave/infection-static-analysis-plugin: ^1.35
- roave/security-advisories: dev-latest
- spiral/boot: ^3.12
- spiral/cycle-bridge: ^2.9
- spiral/framework: ^3.12
- spiral/logger: ^3.12
- spiral/testing: ^2.7
- vimeo/psalm: ^5.23
- wayofdev/cs-fixer-config: ^1.2
Suggests
- spiral/cycle-bridge: Provides integration with Spiral Framework
- wayofdev/laravel-cycle-orm-adapter: Laravel adapter for Cycle ORM
- yiisoft/yii-cycle: Yii Cycle ORM integration
This package is auto-updated.
Last update: 2024-05-17 12:27:37 UTC
README
Active Record Implementation for Cycle ORM
This library extends Cycle ORM by integrating the Active Record pattern, providing developers with an intuitive, object-centric way to interact with databases.
Unlike Cycle ORM's default Data Mapper pattern, which separates the in-memory object representations from database operations, Active Record combines data access and business logic in a single entity.
This allows for more straightforward and rapid development cycles, particularly for simpler CRUD operations, by enabling direct data manipulation through the object's properties and methods.
🚩 Prerequisites
Before you begin, ensure your development environment meets the following requirements:
- PHP Version: 8.2 or higher
- One of the Cycle ORM adapters:
spiral/cycle-bridge
official Cycle ORM adapter for the Spiral Frameworkyiisoft/yii-cycle
— official Cycle ORM adapter for the Yii 3wayofdev/laravel-cycle-orm-adapter
— package managed by @wayofdev for the Laravel 10.x or higher.
💿 Installation
The preferred way to install this package is through Composer.
composer require cycle/active-record
After package install you need to, optionally, register bootloader / service-provider in your application.
→ Spiral Framework
Note
If you are installing the package on the Spiral Framework with the spiral-packages/discoverer package, then you don't need to register bootloader by yourself. It will be registered automatically.
Update Bootloader list in your application configuration:
<?php declare(strict_types=1); namespace App\Application; use Spiral\Cycle\Bootloader as CycleBridge; use Cycle\ActiveRecord\Bridge\Spiral\Bootloader\ActiveRecordBootloader; class Kernel extends \Spiral\Framework\Kernel { public function defineBootloaders(): array { return [ // ... // ORM CycleBridge\SchemaBootloader::class, CycleBridge\CycleOrmBootloader::class, CycleBridge\AnnotatedBootloader::class, // ActiveRecord ActiveRecordBootloader::class, // ... ]; }
For more information about bootloaders, refer to the Spiral Framework documentation.
→ Laravel
Note
If you are using Laravel, then you don't need to register service-provider by yourself. It will be registered automatically.
→ Yii 3
For configuration instructions refer to yii-cycle installation guide.
→ Other Frameworks
This package uses PSR-11 compatible container
to resolve dependencies. After container initialization you need to pass container
instance to the static facade:
\Cycle\ActiveRecord\Facade::setContainer($container);
📖 Usage
Note
For detailed usage instructions, refer to the documentation.
→ Basic Example
Define Entity with ActiveRecord
use Cycle\ActiveRecord\ActiveRecord; use Cycle\Annotated\Annotation\Column; use Cycle\Annotated\Annotation\Entity; #[Entity(table: 'users')] class User extends ActiveRecord { #[Column(type: 'primary', typecast: 'int')] private int $id; #[Column(type: 'string')] private string $name; public function __construct(string $name) { $this->name = $name; } public function id(): int { return $this->id; } public function name() { return $this->name; } }
Create a new record
$user = new User(name: 'John'); $user->save();
🧪 Running Tests
→ PHPUnit tests
To run tests, run the following command:
make test
→ Mutation tests
To run mutation tests, using infection/infection
:
make infect
→ Static Analysis
Code quality using PHPStan:
make lint-stan
and using Psalm:
make lint-psalm
→ Coding Standards Fixing
Fix code using The PHP Coding Standards Fixer (PHP CS Fixer) to follow our standards:
make lint-php
→ Lint Yaml files
Lint all yaml files in project:
make lint-yaml
→ Lint Markdown files
Lint all yaml files in project:
make lint-md
→ Lint GitHub Actions
Lint all yaml files in project:
make lint-actions
🔒 Security Policy
This project has a security policy.
🙌 Want to Contribute?
Thank you for considering contributing to the cycle community! We are open to all kinds of contributions. If you want to:
- 🤔 Suggest a feature
- 🐛 Report an issue
- 📖 Improve documentation
- 👨💻 Contribute to the code
You are more than welcome. Before contributing, kindly check our contribution guidelines.
🫡 Contributors
🌐 Social Links
- Twitter: Follow our organization @SpiralPHP.
- Discord: Join our community on Discord.