Laravel 5.2中的显式ORM同表关系


Eloquent ORM same table relationships in Laravel 5.2

假设我们有一个水果表,如下所示:

id|fruit
----------------
 1|apple
 2|pear
 3|orange
 4|lemon
 5|mandarin

我们希望将这些果实作为彼此的变体来检索,而不需要任何层次结构,也不需要另一个变体表(没有层次注释->回复类型的东西)。

因此,例如,应该能够检索$orange=Fruit::find(3)->fruitVariants;。这将理想地给我们所有相关的水果(柠檬,柑橘)。

相反,$lemon=Fruit::find(4)->fruitVariants;也可能检索到橙色和普通话。

它们都应该是彼此等效的变体,我不知道如何做到这一点。fruit_fruit表格?有什么想法吗?

您需要一些表来存储多对多关系,这是正确的
这种关系是多对多的,因为每种水果都可以有许多变体,每种变体都适合许多水果。

所以你需要这样的fruit_variants表:

+---------+----------+
|fruit_id |variant_id|
+---------+----------+
|        3|         4|
|        3|         5|
|        4|         3|
|        4|         5|
|        5|         3|
|        5|         4|
+---------+----------+

此外,您还需要将此variants方法添加到您的Fruit型号中

public function variants()
{
    return $this->belongsToMany('Fruit', 'fruit_variants', 'fruit_id', 'variant_id');
}