yiisoft/active-record

Yii ActiveRecord Library

dev-master / 3.0.x-dev 2020-11-24 14:29 UTC

This package is auto-updated.

Last update: 2020-11-24 14:29:29 UTC


README

993323

Yii ActiveRecord Library


This package provides ActiveRecord library. It is used in Yii Framework but is supposed to be usable separately.

Latest Stable Version Total Downloads Build status Code Coverage Mutation testing badge type-coverage

Support databases:

Packages PHP Versions CI-Actions
[db-mssql] 7.4 - 8.0 2017 - 2019 Build status Mutation testing badge Code Coverage
[db-mysql] 7.4 - 8.0 5.7 - 8.0 Build status Mutation testing badge Code Coverage
[db-oracle] 7.4 - 8.0 11c - 12c Build status Mutation testing badge Code Coverage
[db-pgsql] 7.4 - 8.0 9.0 - 13.0 Build status Mutation testing badge Code Coverage
[db-sqlite] 7.4 - 8.0 3:latest Build status Mutation testing badge Code Coverage
[db-redis] 7.4 - 8.0 4.0 - 6.0 Build status Mutation testing badge Code Coverage

Installation

The package could be installed via composer:

composer require yiisoft/active-record

Note: You must install the repository of the implementation to use.

Example:

composer require yiisoft/db-mysql

Configuration container di autowired

web.php:

<?php

declare(strict_types=1);

use Yiisoft\Db\Sqlite\Connection as SqliteConnection;

/**
 * config ConnectionInterface::class
 */
return [
    ConnectionInterface::class => [
        '__class' => SqliteConnection::class,
        '__construct()' => [
            'dsn' => $params['yiisoft/db-sqlite']['dsn']
        ]
    ]
];

params.php

<?php

declare(strict_types=1);

return [
    'yiisoft/db-sqlite' => [
        'dsn' => 'sqlite:' . dirname(__DIR__) . '/runtime/yiitest.sq3'
    ]
]

defined your active record, example User.php:

<?php

declare(strict_types=1);

namespace App\Entity;

use Yiisoft\ActiveRecord\ActiveRecord;

/**
 * Entity User.
 *
 * Database fields:
 * @property int $id
 * @property string $username
 * @property string $email
 **/
final class User extends ActiveRecord
{
    public function tableName(): string
    {
        return '{{%user}}';
    }
}

in controler or action:

<?php

declare(strict_types=1);

namespace App\Action;

use App\Entity\User;
use Psr\Http\Message\ResponseInterface;

final class Register
{
    public function register(
        User $user
    ): ResponseInterface {
        /** Connected AR by di autowired. */
        $user->setAttribute('username', 'yiiliveext');
        $user->setAttribute('email', 'yiiliveext@mail.ru');
        $user->save();
    }
}

Configuration factory di

web.php:

<?php

declare(strict_types=1);

use Yiisoft\ActiveRecord\ActiveRecordFactory;
use Yiisoft\Db\Connection\ConnectionInterface;
use Yiisoft\Db\Sqlite\Connection as SqliteConnection;
use Yiisoft\Factory\Definitions\Reference;

/**
 * config SqliteConnection::class
 */
return [
    SqliteConnection::class => [
        '__class' => SqliteConnection::class,
        '__construct()' => [
            'dsn' => $params['yiisoft/db-sqlite']['dsn']
        ]
    ],

    ActiveRecordFactory::class => [
        '__class' => ActiveRecordFactory::class,
        '__construct()' => [
            null,
            [ConnectionInterface::class => Reference::to(SqliteConnection::class)],
        ]
    ]
];

params.php

<?php

declare(strict_types=1);

return [
    'yiisoft/db-sqlite' => [
        'dsn' => 'sqlite:' . dirname(__DIR__) . '/runtime/yiitest.sq3'
    ]
]

defined your active record, example User.php:

<?php

declare(strict_types=1);

namespace App\Entity;

use Yiisoft\ActiveRecord\ActiveRecord;

/**
 * Entity User.
 *
 * Database fields:
 * @property int $id
 * @property string $username
 * @property string $email
 **/
final class User extends ActiveRecord
{
    public function tableName(): string
    {
        return '{{%user}}';
    }
}

in controler or action:

<?php

declare(strict_types=1);

namespace App\Action;

use App\Entity\User;
use Psr\Http\Message\ResponseInterface;
use Yiisoft\ActiveRecord\ActiveRecordFactory;

final class Register
{
    public function register(
        ActiveRecordFactory $arFactory
    ): ResponseInterface {
        /** Connected AR by factory di. */
        $user = $arFactory->createAR(User::class);

        $user->setAttribute('username', 'yiiliveext');
        $user->setAttribute('email', 'yiiliveext@mail.ru');
        $user->save();
    }
}

Unit testing

The package is tested with PHPUnit. To run tests:

./vendor/bin/phpunit

Mutation testing

The package tests are checked with Infection mutation framework. To run it:

./vendor/bin/infection

Static analysis

The code is statically analyzed with Psalm. To run static analysis:

./vendor/bin/psalm

Support the project

Open Collective

Follow updates

Official website Twitter Telegram Facebook Slack

License

The Yii ActiveRecord Library is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.

Maintained by Yii Software.