[英]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.