miseio/neo4j-bundle

Neo4j Bundle

安装: 855

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

0.1.3 2017-08-29 17:50 UTC

This package is not auto-updated.

Last update: 2024-09-29 02:29:47 UTC


README

Build Status Code Climate Latest Stable Version codecov

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 一起使用

安全

如果您发现安全漏洞,请通过电子邮件联系,而不是使用问题跟踪器。所有安全漏洞都将得到及时解决。

独立测试

如何测试

  1. 克隆仓库: $ sudo git clone https://github.com/Misteio/Neo4jBundle.git
  2. 进入目录: $ cd Neo4jBundle/
  3. 安装 composer 如下所述: https://getcomposer.org.cn/download/
  4. 启动 composer install: $ ./composer.phar install
  5. 启动测试: $ ./vendor/bin/phpunit

许可协议

此 Bundle 是开源软件,许可协议为 MIT 协议