cycle/active-record 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

cycle/active-record

最新稳定版本:v1.1.1

Composer 安装命令:

composer require cycle/active-record

包简介

Provides a simple way to work with your database using Active Record pattern and Cycle ORM

README 文档

README


CycleORM Logo

Codecov Coverage Type Coverage Mutation testing badge MetaStorm plugin

Discord Follow on Twitter (X)

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:


💿 Installation

The preferred way to install this package is through Composer.

composer require cycle/active-record

PHP Version Require Latest Stable Version License Total Downloads

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')]
    public ?int $id = null;

    #[Column(type: 'string')]
    public string $name;

    public function create(string $name)
    {
        return self::make([
            'name' => $name,
        ]);
    }
}

Create a new record

$user = User::create(name: 'John');
$user->saveOrFail();

→ Advanced Usage Examples

Query Builder Integration

// Find users with advanced Cycle ORM filtering
$user = User::query()
    ->where('name', 'John')
    ->where('active', true)
    ->fetchOne();

// Find by primary key
$user = User::findByPK(42);

// Find with conditions
$users = User::findAll(['status' => 'active']);
$user = User::findOne(['email' => 'john@example.com']);

Batch Operations and Transactions

$user1 = new User('Alice');
$user2 = new User('Bob');

// Group multiple operations in a single transaction
ActiveRecord::groupActions(function (EntityManagerInterface $em) use ($user1, $user2) {
    $user1->save();
    $user2->save();
    // Both users saved in one transaction
}, TransactionMode::OpenNew);

// Advanced transaction handling
User::transact(function (DatabaseInterface $db, EntityManagerInterface $em) {
    $user = User::query()->forUpdate()->fetchOne(['name' => 'Charlie']);
    $user->name = 'Charles';
    $user->save();
});

🙌 Want to Contribute?

Thank you for considering contributing to the cycle community! We are open to all kinds of contributions. If you want to:

You are more than welcome. Before contributing, kindly check our contribution guidelines.

Conventional Commits Contributors

统计信息

  • 总下载量: 1.01k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 67
  • 点击次数: 1
  • 依赖项目数: 2
  • 推荐数: 1

GitHub 信息

  • Stars: 67
  • Watchers: 3
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-05-06