【发布时间】:2018-06-14 08:19:54
【问题描述】:
class PageRelation extends Eloquent
{
public $incrementing = false;
public $timestamps = false;
protected $table = 'page_relation';
protected $casts = [
'parent' => 'int', // FK to page
'child' => 'int', // FK to page
'lpc' => 'int',
];
protected $fillable = [
'lpc',
];
public function children()
{
return $this->hasMany(Page::class, 'category_id', 'child');
}
public function parents()
{
return $this->hasMany(Page::class, 'category_id', 'parent');
}
public function siblings()
{
// ... return $this->hasMany(Page::class ...
// how do I define this relationship?
}
}
在我的设计中,sibling 是(如您所料)共享相同 parent 但不共享自身的记录(不包括当前的 child)。我怎样才能做到这一点?
这不是Laravel Eloquent Relationships for Siblings的重复,因为1)结构不同,2)我想返回一个关系,而不是一个查询结果,我知道如何查询这个,但我想要eager loader的力量.
【问题讨论】:
-
你能描述一下你们的关系吗,也许用不同的结构会更容易。我有点怀疑是否可以通过多态关系来实现。
-
@Ruman
PageRelation是Page的数据透视表,我希望通过它的几列以及我已经定义的父母和子女关系非常清楚。我只想要共享相同父级的所有页面。至于多态关系:这确实是错误的解决方案,它们适用于从 1 个表到其他 N 个表的关系,使用同一列。 -
好的,我在想别的事。