This package provides ActiveRecord library. It is used in Yii Framework but is supposed to be usable separately.
Packages | PHP | Versions | CI-Actions |
---|---|---|---|
[db-mssql] | 7.4 - 8.0 | 2017 - 2022 | |
[db-mysql] | 7.4 - 8.0 | 5.7 - 8.0 | |
[db-oracle] | 7.4 - 8.0 | 11 - 21 | |
[db-pgsql] | 7.4 - 8.0 | 9.0 - 15.0 | |
[db-sqlite] | 7.4 - 8.0 | 3:latest |
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
web.php:
<?php
declare(strict_types=1);
use Yiisoft\Db\Connection\ConnectionInterface;
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();
}
}
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\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 getTableName(): 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();
}
}
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
The package tests are checked with Infection mutation framework. To run it:
./vendor/bin/infection
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
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.