2013-06-28 3 views
1

, в то время как мы можем создавать новые узлы и т. Д., Мы по-прежнему пытаемся выяснить, как свойства могут быть добавлены к существующим отношениям. Например, мы заявляем следующее в формате Entity:Добавить свойства в отношения в базе данных neo4j с использованием neo4j-OGM в PHP

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

Как мы делаем это так, что мы можем добавить дополнительные свойства GOES_TO_MARKET используя формат доктрины?

Благодаря

ответ

2

Там нет прямого способа сделать это через 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(); 
    } 
}); 
+0

Извините за наивный вопрос, но я еще не делал обратные вызовы. Где бы вы перечислили такую ​​функцию? – jini

+0

, эта регистрация событий может использоваться несколько раз, поскольку свойства должны быть несколько динамическими. спасибо – jini

+0

, где мы добавим вышеуказанный код? В классе Entity или в контроллере на экземпляре $ em? –

1

Замечен, что решение вывешено Луи-Филипп, после недавней установки, не сработало, так как метод triggerEvent под классом EntityManager звонит 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); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^