2016-10-03 2 views
0

Я работаю над доказательством концепции с использованием Laravel и Neo4j в качестве бэкэнд. На данный момент NeoEloquent является предпочтительным выбором: https://github.com/Vinelab/NeoEloquentLaravel NeoEloquent - Динамические отношения между тем же классом узлов

На данный момент у меня есть модель «человек» с отношением hasmany к «термину». Это хорошо работает, как описано в: https://github.com/Vinelab/NeoEloquent#one-to-many

Следующий шаг - создать динамические отношения. Таким образом, термин может иметь отношение к другому термину. Тип отношения также должен быть гибким. Так что это может быть своего рода, скопирована, отношение к, и т.д. Так же, как это:

enter image description here

типы отношений не должны быть установлены и будут визуализированы на более позднем этапе. Каков наилучший подход для этого? Могу ли я сделать это с помощью Полиморфных отношений и HyperEdges? Насколько я понимаю, с полиморфными отношениями между ними создается дополнительный узел. Эта концепция отличается от того, как работает Neo4j, где у границ есть свойства и атрибуты. Я прав? Каков наилучший подход для этого?

ответ

0

Я вроде как исправил это, используя Полиморфное отношение. Это не оптимально, потому что создается дополнительный узел со свойствами, которые я хочу установить в отношении, но он работает на данный момент. Вот связь класс я создал:

class Relation extends NeoEloquent 
{ 
    protected $label = 'Relation'; 
    protected $guarded = []; 
    public $timestamps = false; 
    protected $fillable = ['relation_name','relation_description']; 
    public function subject() 
    { 
     return $this->morphMany('App\Term','TO'); 
    } 
} 

Вот класс Term:

class Term extends NeoEloquent 
{ 
    protected $label = 'Term'; 
    protected $guarded = []; 
    public $timestamps = false; 
    protected $fillable = ['term_name','term_definition']; 
    public function author() 
    { 
     return $this->belongsTo('App\User', 'CREATED'); 
    } 
    public function relationship($morph=null) 
    { 
     return $this->hyperMorph($morph, 'App\Relation', 'RELATION', 'TO'); 
    } 
    public function object() 
    { 
     return $this->belongsToMany('App\Term', 'RELATION'); 
    } 
    public function whichRelation() 
    { 
     return $this->morphMany('App\Relation','TO'); 
    } 
} 

Я открытый исходный код некоторые части в качестве демо Laravel + NeoEloquent + Neo4j. Ссылка на github находится здесь: https://github.com/pietheinstrengholt/laravel-neo4j-neoeloquent-demo

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