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.
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.
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.
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.
Note
If you are using Laravel, then you don't need to register service-provider by yourself. It will be registered automatically.
For configuration instructions refer to yii-cycle installation guide.
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);
Note
For detailed usage instructions, refer to the documentation.
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;
}
}
$user = new User(name: 'John');
$user->save();
To run tests, run the following command:
make test
To run mutation tests, using infection/infection
:
make infect
Code quality using PHPStan:
make lint-stan
and using Psalm:
make lint-psalm
Fix code using The PHP Coding Standards Fixer (PHP CS Fixer) to follow our standards:
make lint-php
Lint all yaml files in project:
make lint-yaml
Lint all yaml files in project:
make lint-md
Lint all yaml files in project:
make lint-actions
This project has a security policy.
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.
- Twitter: Follow our organization @SpiralPHP.
- Discord: Join our community on Discord.