expio / neo4j-data-fixtures
此包已被废弃,不再维护。没有建议的替代包。
基于 Doctrine Data Fixtures 的 Neo4j OGM 数据设置
v1.0.0-ALPHA3
2012-09-20 10:26 UTC
Requires
- php: >=5.3.2
This package is not auto-updated.
Last update: 2022-10-24 05:22:32 UTC
README
此扩展旨在提供一个简单的方法来管理和执行 Neo4j OGM 的数据设置加载。您可以通过实现 Expio\Common\Neo4jDataFixtures\FixtureInterface 接口来编写设置类
namespace MyDataFixtures;
use Kwattro\Neo4j\GraphManager;
use Expio\Common\Neo4jDataFixtures\FixtureInterface;
class LoadUserData implements FixtureInterface
{
public function load(GraphManager $manager)
{
$user = new User();
$user->setUsername('jwage');
$user->setPassword('test');
$manager->persist($user);
$manager->flush();
}
}
现在您可以开始向加载实例添加设置
use Expio\Common\Neo4jDataFixtures\Loader;
use MyDataFixtures\LoadUserData;
$loader = new Loader();
$loader->addFixture(new LoadUserData);
您还可以从目录中加载一组设置
$loader->loadFromDirectory('/path/to/MyDataFixtures');
您可以使用 getFixtures() 方法获取添加的设置
$fixtures = $loader->getFixtures();
现在您可以轻松地执行设置
use Expio\Common\Neo4jDataFixtures\Executor\OGMExecutor;
use Expio\Common\Neo4jDataFixtures\Purger\OGMPurger;
$purger = new OGMPurger();
$executor = new OGMExecutor($em, $purger);
$executor->execute($loader->getFixtures());
如果想在加载前追加设置而不是清除,则在 execute 的第二个参数中传递 true
$executor->execute($loader->getFixtures(), true);
在设置之间共享对象
如果设置对象与其他设置有关系,现在可以很容易地通过名称添加对该对象的引用,然后可以引用它来形成关系。以下是一个示例设置,用于 Role 和 User 关系
namespace MyDataFixtures;
use Expio\Common\Neo4jDataFixtures\AbstractFixture;
use HireVoice\Neo4j\EntityManager;
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 Expio\Common\Neo4jDataFixtures\AbstractFixture;
use HireVoice\Neo4j\EntityManager;
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 Expio\Common\Neo4jDataFixtures\AbstractFixture;
use Expio\Common\Neo4jDataFixtures\OrderedFixtureInterface;
use HireVoice\Neo4j\EntityManager;
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 Expio\Common\Neo4jDataFixtures\AbstractFixture;
use Expio\Common\Neo4jDataFixtures\DependentFixtureInterface;
use HireVoice\Neo4j\EntityManager;
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 的根目录
- 运行:git submodule init
- 运行:git submodule update
- 复制 PHPUnit 配置:cp phpunit.xml.dist phpunit.xml
- 运行:phpunit