miseio / neo4j-bundle
Neo4j Bundle
Requires
- php: >=7.0
- doctrine/doctrine-bundle: >=1.4
- doctrine/doctrine-fixtures-bundle: >=2.3
- doctrine/orm: >=2.4.8
- graphaware/neo4j-php-client: 4.8.1
- symfony/console: ~2.8|~3.0
- symfony/finder: ~2.8|~3.0
- symfony/framework-bundle: ~2.8|~3.0
- symfony/process: ~2.8|~3.0
- symfony/validator: ~2.8|~3.0
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: 5.5.7
This package is not auto-updated.
Last update: 2024-09-29 02:29:47 UTC
README
Neo4jBundle 是一个为简化使用 Neo4J 3.x 与 Doctrine 2.x 而设计的 Symfony2/3 Bundle。
安装
通过 Composer
$ composer require misteio/neo4j-bundle
或在 composer.json 文件中
"misteio/neo4jbundle-bundle": "dev-master"
在 app/AppKernel.php
中注册该 Bundle
public function registerBundles() { return array( // ... new Misteio\Neo4jBundle\MisteioNeo4jBundle(), // ... ); }
配置
在 app/config/config.yml
中配置您的连接和映射
imports: - { resource: parameters.yml } misteio_neo4j: connections: %neo4j.hosts% mappings: %neo4j.mappings%
然后在 app/config
中创建一个名为 parameters.yml 的文件
parameters: neo4j.hosts: graphenedb: host: 'yourHostWithoutScheme' port: yourPort user: username password: yourPassword neo4j.mappings: FakeEntity: class: '\Misteio\Neo4jBundle\Tests\Entity\FakeEntity' transformer: 'neo4j.fakeentity.transformer' auto_event: true connection: 'graphenedb' indexes: - 'name' # only available for neo4j 3.2 and above composite_indexes: - 'id,name'
实体示例
<?php namespace Name\NameBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity() */ class YourEntityClassName { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * Set id * * @param integer $id * @return Id */ public function setId($id) { $this->id = $id; return $this; } /** * @var string * * @ORM\Column(name="name", type="string", length=255) */ protected $name; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return City */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } }
如您所见,您必须为您的工作实体创建一个转换器。
<?php namespace Name\NameBundle\Entity\Transformer\EntityTransformer; use Misteio\Neo4jBundle\Helper\Neo4jHelper; use Name\NameBundle\Entity\YourEntityClassName; class YourTransformerClassName { /** @var Neo4jHelper */ private $neo4jHelper; /** * @param Neo4jHelper $neo4jHelper */ public function setNeo4jHelper(Neo4jHelper $neo4jHelper) { $this->neo4jHelper = $neo4jHelper; } /** * @param FakeEntity $fake * @param $connectionName * @return bool */ public function transform(FakeEntity $fake, $connectionName) { $this->neo4jHelper->getClient($connectionName)->run('CREATE (n:FakeEntity {id :{id}, name:{name}} )', ['id' => $fake->getId(), 'name' => $fake->getName()]); return true; } }
用法
如果设置了 auto_event,则对于您实体的创建、更新和删除,您无需做任何事情。
您可以使用 MisteioNeo4jHelper 和 Graphaware 来调用 Neo4j。以下是一个控制器中的示例。
$client = $this->getContainer()->get('misteio.neo4j.helper')->getClient('graphenedb'); $result = $client->run("Match (n:FakeEntity) RETURN n;"); $nodes = $result->getRecords();
有关查询 Neo4j 的更多信息,请参阅 GraphAware Neo4j PHP 客户端
如果没有设置 auto_event,您可以像这样监听 misteio.neo4j.event
name.neo4j.subscriber: class: Name\NameBundle\Subscriber\Neo4jSubscriber tags: - { name: kernel.event_listener, event: misteio.neo4j.event, method: onNeo4jEntityAction }
并在您的 EventListener 类中
<?php namespace Name\NameBundle\EventListener; use Misteio\Neo4jBundle\Event\Neo4jEvent; class Neo4jListener { /** * @param Neo4jEvent $event */ public function onNeo4jEntityAction(Neo4jEvent $event) { //Action can be persist, update and delete $action = $event->getAction(); //Your Doctrine Entity $entity = $event->getEntity(); } }
填充命令
在配置完您的实体后,您可能希望将它们在 Neo4j 中可用。您必须使用 php app/console misteio:neo4j:populate
(对于 Symfony 2)或 php bin/console misteio:neo4j:populate
(对于 Symfony 3)来使它们可用。有多种选项可供选择
- --limit=int : 您集合的限制
- --offset=int : 您集合的偏移量
- --type=string : 您对象(在我们的示例中是 YourEntityClassName)的名称
- --threads=int : 您想要使用的线程数。如果您使用它,则限制将不可用,并且您必须设置一个批次。
- --reset : 删除所有您的节点。可以与类型一起传递。如果传递了类型,则将删除所选实体的所有节点。小心,您将在 Neo4j 集群中丢失所有数据
- --reset_index : 重置您的索引。必须与 reset 一起传递
- --batch=int : 每个线程的集合长度。仅与 threads 一起使用
安全
如果您发现安全漏洞,请通过电子邮件联系,而不是使用问题跟踪器。所有安全漏洞都将得到及时解决。
独立测试
如何测试
- 克隆仓库:
$ sudo git clone https://github.com/Misteio/Neo4jBundle.git
- 进入目录:
$ cd Neo4jBundle/
- 安装 composer 如下所述: https://getcomposer.org.cn/download/
- 启动 composer install:
$ ./composer.phar install
- 启动测试:
$ ./vendor/bin/phpunit
许可协议
此 Bundle 是开源软件,许可协议为 MIT 协议