新しいノードなどを作成することはできますが、プロパティを既存の関係に追加する方法を見つけるのにまだ苦労しています。たとえば、エンティティ形式で次を宣言しています。
/**
* @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();
}
});
EntityManager クラスの triggerEvent メソッドが、提供された引数で array_shift を呼び出しているため、最近インストールした後、Louis-Philippe によって投稿されたソリューションが機能しないことに気付きました。したがって、これにより、コールバックは 5 つの必須パラメーターのうち 4 つしか受信しませんでした。
$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);
}
}
}