繁体   English   中英

使用PHP中的neo4j-OGM为neo4j数据库中的关系添加属性

[英]Add properties to relationships in a neo4j database using neo4j-OGM in PHP

虽然我们能够创建新节点等,但我们仍在努力寻找如何将属性添加到现有关系中。 例如,我们以实体格式声明以下内容:

   /**
     * @OGM\ManyToMany(relation="GOES_TO_MARKET")
     */
    protected $shoppers;

我们如何制作它以便我们可以使用doctrine格式向GOES_TO_MARKET添加其他属性?

谢谢

目前没有直接通过API的方法。 虽然有一些工作正在进行中,但还远未完成。

您可以在关系创建上注册回调。

$em->registerEvent(HireVoice\Neo4j\EntityManager::RELATION_CREATE, function ($type, $relationName, $from, $to, $relation) {
    // $relation is the Everyman\Neo4j\Relationship
    if ($relationName === 'GOES_TO_MARKET') {
        $relation->setProperty('foobar', 'baz')->save();
    }
});

注意到Louis-Philippe在最近安装之后发布的解决方案无法工作,因为EntityManager类下的triggerEvent方法在提供的参数上调用array_shift。 因此,这导致回调仅接收五个所需参数中的四个。

$em->registerEvent(HireVoice\Neo4j\EntityManager::RELATION_CREATE, function ($type, $relationName, $from, $to, $relation) {
    // $relation is the Everyman\Neo4j\Relationship
    if ($relationName === 'GOES_TO_MARKET') {
        $relation->setProperty('foobar', 'baz')->save();
    }
});

通过替换以下内容解决了这个问题:(请注意,这尚未经过全面测试,可能会影响代码的其他部分。)

private function triggerEvent($eventName, $data)
{
    if (isset($this->eventHandlers[$eventName])) {
        $args = func_get_args();
        array_shift($args);

        foreach ($this->eventHandlers[$eventName] as $callback) {
            $clone = $args;
            call_user_func_array($callback, $clone);
        }
    }
}

通过:

private function triggerEvent($eventName, $data)
{
    if (isset($this->eventHandlers[$eventName])) {
        $args = func_get_args();

        foreach ($this->eventHandlers[$eventName] as $callback) {
            $clone = $args;
            call_user_func_array($callback, $clone);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM