nnx / data-fixtures
所有 Doctrine 对象管理器的数据固定
2.0.0
2016-09-07 12:17 UTC
Requires
- php: ^5.6 || ^7.0
- doctrine/common: ~2.2
Requires (Dev)
- doctrine/dbal: ^2.5.4
- doctrine/orm: ^2.5.4
- phpunit/phpunit: ^5.4.6
Suggests
- doctrine/mongodb-odm: For loading MongoDB ODM fixtures
- doctrine/orm: For loading ORM fixtures
- doctrine/phpcr-odm: For loading PHPCR ODM fixtures
Conflicts
- doctrine/orm: < 2.4
Replaces
This package is not auto-updated.
Last update: 2024-09-23 12:27:42 UTC
README
此扩展旨在提供一种简单的方式来管理和执行 Doctrine ORM 或 ODM 的数据固定加载。您可以通过实现 Doctrine\Common\DataFixtures\FixtureInterface
接口来编写固定类
namespace MyDataFixtures; use Doctrine\Common\Persistence\ObjectManager; use Doctrine\Common\DataFixtures\FixtureInterface; class UserFixtureLoader implements FixtureInterface { public function load(ObjectManager $manager) { $user = new User(); $user->setUsername('jwage'); $user->setPassword('test'); $manager->persist($user); $manager->flush(); } }
现在您可以开始将固定添加到加载实例中
use Doctrine\Common\DataFixtures\Loader; use MyDataFixtures\LoadUserData; $loader = new Loader(); $loader->addFixture(new LoadUserData());
您还可以从目录中加载一组固定
$loader->loadFromDirectory('/path/to/MyDataFixtures');
或者您可以从文件中加载一组固定
$loader->loadFromFile('/path/to/MyDataFixtures/MyFixture1.php');
您可以使用 getFixtures() 方法获取添加的固定
$fixtures = $loader->getFixtures();
现在您可以轻松执行固定
use Doctrine\Common\DataFixtures\Executor\ORMExecutor; use Doctrine\Common\DataFixtures\Purger\ORMPurger; $purger = new ORMPurger(); $executor = new ORMExecutor($em, $purger); $executor->execute($loader->getFixtures());
如果要在加载前追加固定而不是清除,则将 true 传递给 execute 的第二个参数
$executor->execute($loader->getFixtures(), true);
固定之间共享对象
如果固定对象与其他固定有关系,现在可以轻松通过名称添加对该对象的引用,并在以后引用它以形成关系。以下是一个示例固定,用于 Role 和 User 关系
namespace MyDataFixtures; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\Persistence\ObjectManager; class LoadUserRoleData extends AbstractFixture { public function load(ObjectManager $manager) { $adminRole = new Role(); $adminRole->setName('admin'); $anonymousRole = new Role(); $anonymousRole->setName('anonymous'); $manager->persist($adminRole); $manager->persist($anonymousRole); $manager->flush(); // store reference to admin role for User relation to Role $this->addReference('admin-role', $adminRole); } }
以及 User 数据加载固定
namespace MyDataFixtures; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\Persistence\ObjectManager; class LoadUserData extends AbstractFixture { public function load(ObjectManager $manager) { $user = new User(); $user->setUsername('jwage'); $user->setPassword('test'); $user->setRole( $this->getReference('admin-role') // load the stored reference ); $manager->persist($user); $manager->flush(); // store reference of admin-user for other Fixtures $this->addReference('admin-user', $user); } }
固定排序
注意 固定加载顺序很重要!为了手动处理它,实现以下接口之一
OrderedFixtureInterface
手动设置顺序
namespace MyDataFixtures; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\DataFixtures\OrderedFixtureInterface; use Doctrine\Common\Persistence\ObjectManager; class MyFixture extends AbstractFixture implements OrderedFixtureInterface { public function load(ObjectManager $manager) {} public function getOrder() { return 10; // number in which order to load fixtures } }
DependentFixtureInterface
提供固定类名的数组
namespace MyDataFixtures; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Common\Persistence\ObjectManager; class MyFixture extends AbstractFixture implements DependentFixtureInterface { public function load(ObjectManager $manager) {} public function getDependencies() { return array('MyDataFixtures\MyOtherFixture'); // fixture classes fixture is dependent on } } class MyOtherFixture extends AbstractFixture { public function load(ObjectManager $manager) {} }
注意 排序与 Loader 类相关。
运行测试
需要 PHPUnit 3.5 或更高版本以及 Mock_Object 包。要设置和运行测试,请按照以下步骤操作
- 前往 data-fixtures 的根目录
- 运行: composer install --dev
- 复制 phpunit 配置 cp phpunit.xml.dist phpunit.xml
- 运行: phpunit