api-skeletons/laravel-doctrine-data-fixtures

Laravel的Doctrine数据固定工具

1.0.3 2024-04-10 08:00 UTC

This package is auto-updated.

Last update: 2024-09-10 08:51:30 UTC


README

Continuous Integration Code Coverage PHP Version Laravel Version Total Downloads License

Laravel内置了对'种子数据'的支持。在种子数据中,类没有命名空间,许多开发者将种子数据视为一次性导入。种子数据通常使用自增主键。也许这些注释就是种子数据与固定数据的区别。

在我的固定数据中,我希望有静态的主键,并且我希望能够随时重新运行我的固定数据。我希望固定数据填充的数据与固定数据一起存储,并且我希望通过代码中的类常量来引用固定数据值。

例如,为了验证一个用户有一个ACL角色,代码可能读取

$acl->hasRole($user, 'admin');

但代码中字符串的使用并不容易阅读,并且可能存在错误。而不是上面的,我希望我的代码读取

use App\ORM\Fixture\RoleFixture;

$acl->hasRole($user, RoleFixture::admin);

由于种子数据没有命名空间,这种模式不可能实现。因此,这个存储库不仅作为Laravel种子数据的替代品,而且作为静态数据库数据的命名空间集成工具。

安装

运行以下命令使用Composer安装此库

composer require api-skeletons/laravel-doctrine-data-fixtures

需要一个doctrine-data-fixtures.php配置文件。发布包含的配置到您的项目中

php artisan vendor:publish --tag=config --provider="ApiSkeletons\Laravel\Doctrine\DataFixtures\ServiceProvider"

配置

支持Doctrine MongoDB、ORM和PHPCR。有关详细信息,请参阅配置文件。

此示例假设已安装laravel-doctrine/orm,您将使用ORM数据固定

return [
    'default' => [  // This is the group name
        'entityManager' => EntityManager::class,
        'executor' => ORMExecutor::class,
        'purger' => ORMPurger::class,
        'fixtures' => [
            Fixture1::class,
            Fixture2::class,
        ],
    ],
];

固定组

api-skeletons/doctrine-data-fixture为Laminas建模,固定数据按组组织。这种组织允许为特定模块、开发伪造数据、不同的实体管理器等组织固定数据。

使用

列出固定数据

列出所有组或列出某个组的所有固定数据。

php artisan doctrine:data-fixtures:list [<group>]

<group>是可选的。

通过Artisan命令执行固定组

php artisan doctrine:data-fixtures:import <group> [--purge-with-truncate] [--do-not-append]

需要<group>

追加是默认选项。与--do-not-append相反

选项

--purge-with-truncate如果指定,将在运行ORMPurger的固定数据之前清除对象管理器的表。

--do-not-append将在运行固定数据之前删除数据库中的所有数据。

从代码中执行固定组

对于单元测试或其他您必须从代码中运行固定数据的情况,请按照以下示例操作

use use Doctrine\Common\DataFixtures\Loader;

$config = config('doctrine-data-fixtures')[$groupName];

$objectManager = app($config['objectManager']);
$purger        = app($config['purger']);
$executorClass = $config['executor'];
$loader        = new Loader();

foreach ($config['fixtures'] as $fixture) {
    $loader->addFixture($fixture);
}

$executor = new $executorClass($objectManager, $purger);
$executor->execute($loader->getFixtures());

Doctrine数据固定

请务必阅读父库的文档doctrine/data-fixtures