pandawan-technology / neo4j-data-fixtures
允许加载Neo4j数据固定值
dev-master / 1.0.x-dev
2016-08-31 21:40 UTC
Requires
This package is auto-updated.
Last update: 2024-09-20 07:27:26 UTC
README
这个库将允许您将固定值数据加载到Neo4j图数据库中。它受到了Doctrine Data Fixtures 扩展的启发。
简单使用
您只需扩展此库提供的AbstractNeo4jFixture
类即可
<?php namespace MyNamespace\Fixtures; use GraphAware\Common\Connection\ConnectionInterface; use PandawanTechnology\Neo4jDataFixtures\AbstractNeo4jFixture; class UserFixture extends AbstractNeo4jFixture { public function load(ConnectionInterface $connection) { $connection->getSession()->run("CREATE (a:Person {name:'Arthur', title:'King'})"); } }
现在您需要将此固定值注册到加载器中
<?php namespace MyNamespace\Fixtures; use PandawanTechnology\Neo4jDataFixtures\Loader; $loader = new Loader(); $loader->addFixture(new UserFixture());
您还可以从目录中加载固定值
$loader->loadFromDirectory(__DIR__);
或指定一个文件
$loader->loadFromFile('./UserFixture.php');
最后,您可以得到您的固定值
$fixtures = $loader->getFixtures();
现在您可以运行固定值加载了
use PandawanTechnology\Neo4jDataFixtures\Executor; $executor = new Executor($connection); $executor->execute($loader->getFixtures());
如果您想在每次加载固定值时清除数据库,您将需要使用Purger
类
use PandawanTechnology\Neo4jDataFixtures\Executor; use PandawanTechnology\Neo4jDataFixtures\Purger; $purger = new Purger($connection); $executor = new Executor($connection, $purger); $executor->execute($loader->getFixtures());
Executor::execute()
方法将接受第二个参数以忽略数据库删除。默认行为是删除数据,只要提供了Purger
实例。
在您的固定值文件之间添加依赖关系
您可以在固定值中使用DependentFixtureInterface
来添加依赖关系
<?php namespace MyNamespace\Fixtures; use GraphAware\Common\Connection\ConnectionInterface; use PandawanTechnology\Neo4jDataFixtures\DependentFixtureInterface; use PandawanTechnology\Neo4jDataFixtures\FixtureInterface; class UserFixture implements DependentFixtureInterface { public function getDependencies() { return ['MyNamespace\Fixtures\OrganizationFixture']; } public function load(ConnectionInterface $connection) { $connection->getSession()->run("CREATE (a:Person {name:'Arthur', title:'King'})"); } } class OrganizationFixture implements FixtureInterface { public function load(ConnectionInterface $connection) { // ... } }
在您的固定值文件之间共享对象
如果您使用DependentFixtureInterface
,那么您很可能需要在固定值文件之间共享对象。为了做到这一点,您可以使用setReference
/addReference
方法来分配一个引用(!)——最新的将确保唯一性——然后使用getReference
方法来获取它
<?php namespace MyNamespace\Fixtures; use GraphAware\Common\Connection\ConnectionInterface; use PandawanTechnology\Neo4jDataFixtures\DependentFixtureInterface; use PandawanTechnology\Neo4jDataFixtures\FixtureInterface; class OrganizationFixture implements FixtureInterface { public function load(ConnectionInterface $connection) { if (!$organizationStmt = $connection->getSession()->run("CREATE (s:Organization {name:'Pandawan Technology'}) RETURN id(o)")) { continue; } $this->addReference('organization-pandawan-technology', $organizationStmt->getRecord()->value('id(o)')); } } class UserFixture implements DependentFixtureInterface { public function getDependencies() { return ['MyNamespace\Fixtures\OrganizationFixture']; } public function load(ConnectionInterface $connection) { $session = $connection->getSession(); if (!$userStmt = $session->run("CREATE (a:Person {name:'Arthur', title:'King'}) RETURN id(a)")) { return; } $session->rund('MATCH (u:User), (o:Organization) WHERE id(u) = {user_id} AND id(o) = {organization_id} CREATE (u)-[r:BELONGS_TO]->(o) RETURN r', [ 'organisation_id' => $this->getReference('organization-pandawan-technology'), 'user_id' => $userStmt->getRecord()->value('id(a)') ]); } }