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 - 雄辩的 ORM 关系查询

Laravel 雄辩的一对一通过(级别/树)关系

Laravel 雄辩的 ORM 群在哪里

雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]

从 mysql 迁移到 postgresql 时,Laravel 雄辩的 ORM 不起作用

laravel 4 - 如何限制(采取和跳过)雄辩的 ORM?