Laravel 5.2 中雄辩的 ORM 同表关系
Posted
技术标签:
【中文标题】Laravel 5.2 中雄辩的 ORM 同表关系【英文标题】:Eloquent ORM same table relationships in Laravel 5.2 【发布时间】:2016-04-08 09:56:58 【问题描述】:假设我们有一个如下所示的水果表:
id|fruit
----------------
1|apple
2|pear
3|orange
4|lemon
5|mandarin
并且我们希望将这些水果作为彼此的变体检索,没有任何层次结构,也没有另一个变体表(没有层次结构的 cmets->回复类型的东西)。
因此,例如,应该能够检索$orange=Fruit::find(3)->fruitVariants;
。理想情况下,这会给我们所有相关的水果(柠檬、柑橘)。
逆向也应该是可能的$lemon=Fruit::find(4)->fruitVariants;
应该检索橙色和普通话。
它们应该都是彼此等效的变体,我不知道如何做到这一点。 fruit_fruit
表?有什么想法吗?
【问题讨论】:
【参考方案1】:你是对的,你需要一些表来存储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');
【讨论】:
以上是关于Laravel 5.2 中雄辩的 ORM 同表关系的主要内容,如果未能解决你的问题,请参考以下文章
雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]