Laravel NeoEloquent - 同一节点类

时间:2016-10-03 10:37:52

标签: laravel neo4j neoeloquent

我正在使用Laravel和Neo4j作为后端进行概念验证。 NeoEloquent现在是最受欢迎的选择:https://github.com/Vinelab/NeoEloquent

目前我有一个'人'模型与'术语'有很多关系。这很有效,就像在https://github.com/Vinelab/NeoEloquent#one-to-many

中描述的那样

下一步是创建动态关系。所以一个术语可以与另一个术语有关系。关系类型也必须灵活。所以它可以是一种复制,关系等等。就像这样:

enter image description here

不应修复关系类型,并在稍后阶段进行可视化。对此最好的方法是什么?我可以用多态关系和HyperEdges做到这一点吗?据我所知,通过多态关系,在它们之间创建了一个额外的节点。这个概念与Neo4j的工作方式不同,边缘具有属性和属性。我对吗?对此最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

我通过使用多态关系来修复它。它不是最佳的,因为创建了一个附加节点,其中包含我想在关系上设置的属性,但它现在可以正常工作。这是我创建的Relation Class:

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