Eloquent Laravel 5.2 中的 ORM 相同 table 关系
Eloquent ORM same table relationships in Laravel 5.2
假设我们有一个水果 table 如下所示:
id|fruit
----------------
1|apple
2|pear
3|orange
4|lemon
5|mandarin
并且我们希望检索这些水果作为彼此的变体,没有任何层次结构,也没有另一个 table 变体(没有层次结构评论->回复类型)。
因此,例如,应该能够检索 $orange=Fruit::find(3)->fruitVariants;
。理想情况下,这会为我们提供所有相关水果(柠檬、柑橘)。
逆应该也是可能的$lemon=Fruit::find(4)->fruitVariants;
应该检索橙色和普通话。
它们应该都是彼此等效的变体,我不知道如何做到这一点。一个fruit_fruit
table?有什么想法吗?
你是对的,你需要一些 table 来存储 many-to-many relationship。
这种关系是多对多的,因为每个水果可以有很多变体,每个变体可以适合很多水果。
所以你需要这样的 fruit_variants
table:
+---------+----------+
|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');
}
假设我们有一个水果 table 如下所示:
id|fruit
----------------
1|apple
2|pear
3|orange
4|lemon
5|mandarin
并且我们希望检索这些水果作为彼此的变体,没有任何层次结构,也没有另一个 table 变体(没有层次结构评论->回复类型)。
因此,例如,应该能够检索 $orange=Fruit::find(3)->fruitVariants;
。理想情况下,这会为我们提供所有相关水果(柠檬、柑橘)。
逆应该也是可能的$lemon=Fruit::find(4)->fruitVariants;
应该检索橙色和普通话。
它们应该都是彼此等效的变体,我不知道如何做到这一点。一个fruit_fruit
table?有什么想法吗?
你是对的,你需要一些 table 来存储 many-to-many relationship。
这种关系是多对多的,因为每个水果可以有很多变体,每个变体可以适合很多水果。
所以你需要这样的 fruit_variants
table:
+---------+----------+
|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');
}