api-skeletons / laravel-doctrine-data-fixtures
Laravel的Doctrine数据固定工具
Requires
- php: ^8.0
- doctrine/data-fixtures: ^1.5
- laravel/framework: ^8.82 || ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- doctrine/coding-standard: ^9
- doctrine/dbal: ^2.13
- laravel-doctrine/orm: ^1.7
- orchestra/testbench: ^6.24
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.20 || ^5.0
README
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