expio/neo4j-data-fixtures

此包已被废弃,不再维护。没有建议的替代包。

基于 Doctrine Data Fixtures 的 Neo4j OGM 数据设置

v1.0.0-ALPHA3 2012-09-20 10:26 UTC

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);

在设置之间共享对象

如果设置对象与其他设置有关系,现在可以很容易地通过名称添加对该对象的引用,然后可以引用它来形成关系。以下是一个示例设置,用于 RoleUser 关系

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