在Laravel 5.2中雄辩的ORM相同的表关系

时间:2016-04-08 09:56:58

标签: php orm laravel-5 eloquent many-to-many

假设我们有一个如下的水果表:

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

并且我们想要将这些水果作为彼此的变体检索而没有任何层次结构,并且没有另一个变体表(没有分层注释 - >回复事物的类型)。

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

逆变量也应该是$lemon=Fruit::find(4)->fruitVariants;应该检索橙色和普通话。

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

1 个答案:

答案 0 :(得分:3)

你是对的,你需要一些表来存储many-to-many relationship。这种关系很多,因为每种水果都有很多变种,每种变种都适合许多水果。

所以你需要这样的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');
}