使用 NeoEloquent 进行关系映射
Relationship mapping with NeoEloquent
我正在使用 NeoEloquent 修补 Neo4j 2.3.0 和 Laravel 5.1。我设置了几个虚拟节点和它们之间的一些关系:
image of Neo4j model - apologies, I cannot insert images directly yet :)
所以文章可以使用一个模板。这种关系的反面是 模板 被 使用 文章 。
我已经像这样设置了 类:
Class Template extends Model
{
public function articles()
{
return $this->hasMany('App\Article', 'USED_BY');
}
}
并且:
Class Article extends Model
{
public function template()
{
return $this->belongsTo('App\Template', 'USES');
}
}
到目前为止,我认为还不错。
我有一个页面,我想最终列出系统中的所有文章,以及一些有用的元数据,例如每个文章使用的模板。为此,我在控制器中设置了一些东西:
$articles = array();
foreach (Article::with('template')->get() as $article) {
array_push($articles, $article);
}
return $articles;
不是最优雅的,但它应该 return 文章及其关联模板的数据。然而:
[{"content":"Some test content","title":"Test Article","id":28,"template":null},{"content":"Some flibble content","title":"Flibble","id":31,"template":null}]
所以问题是 - 为什么这个 returning 为空?
更有趣的是,如果我在两个方向上设置与同一事物的关系,它 return 就是值。即,如果我将 USED_BY 更改为 USES,则数据会被 returned,但从架构的角度来看这没有意义 - 模板不会 'use' 一篇文章。
那我错过了什么?
More interestingly, if I set up the relationship to the same thing in BOTH directions, it returns the values.
没错,因为它就是这样运作的。值得知道的是,您定义的关系方法代表关系本身,这意味着模型 Template
和 Article
从任何一方定位 USED_BY
关系都必须相同在 articles()
和 template
.
解决方案是在两侧使用类似 USES
的东西(或您喜欢的任何概念)。 This reference 应该可以帮助您在人际关系方面做出正确的决定。
另一方面,如果您仍然希望两侧有不同的关系,请注意在您的模型(图像)中,两种关系都是外向的。 即Fibble-[:USES]->Template
和 Template-[:USED_BY]->Fibble
这意味着 template()
应该是外向关系,例如 hasOne
而不是 belongsTo
是传入。
我正在使用 NeoEloquent 修补 Neo4j 2.3.0 和 Laravel 5.1。我设置了几个虚拟节点和它们之间的一些关系:
image of Neo4j model - apologies, I cannot insert images directly yet :)
所以文章可以使用一个模板。这种关系的反面是 模板 被 使用 文章 。
我已经像这样设置了 类:
Class Template extends Model
{
public function articles()
{
return $this->hasMany('App\Article', 'USED_BY');
}
}
并且:
Class Article extends Model
{
public function template()
{
return $this->belongsTo('App\Template', 'USES');
}
}
到目前为止,我认为还不错。
我有一个页面,我想最终列出系统中的所有文章,以及一些有用的元数据,例如每个文章使用的模板。为此,我在控制器中设置了一些东西:
$articles = array();
foreach (Article::with('template')->get() as $article) {
array_push($articles, $article);
}
return $articles;
不是最优雅的,但它应该 return 文章及其关联模板的数据。然而:
[{"content":"Some test content","title":"Test Article","id":28,"template":null},{"content":"Some flibble content","title":"Flibble","id":31,"template":null}]
所以问题是 - 为什么这个 returning 为空?
更有趣的是,如果我在两个方向上设置与同一事物的关系,它 return 就是值。即,如果我将 USED_BY 更改为 USES,则数据会被 returned,但从架构的角度来看这没有意义 - 模板不会 'use' 一篇文章。
那我错过了什么?
More interestingly, if I set up the relationship to the same thing in BOTH directions, it returns the values.
没错,因为它就是这样运作的。值得知道的是,您定义的关系方法代表关系本身,这意味着模型 Template
和 Article
从任何一方定位 USED_BY
关系都必须相同在 articles()
和 template
.
解决方案是在两侧使用类似 USES
的东西(或您喜欢的任何概念)。 This reference 应该可以帮助您在人际关系方面做出正确的决定。
另一方面,如果您仍然希望两侧有不同的关系,请注意在您的模型(图像)中,两种关系都是外向的。 即Fibble-[:USES]->Template
和 Template-[:USED_BY]->Fibble
这意味着 template()
应该是外向关系,例如 hasOne
而不是 belongsTo
是传入。