2016-04-08 23 views
0

で雄弁ORM同じテーブルの関係は、我々は次のような果物のテーブルがあるとします。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;は、オレンジとマンダリンを検索する必要があります。

これらはすべてお互いの同等のバリアントである必要があります。私はこれを行う方法について考えていません。 A fruit_fruitテーブル?何か案は?

答えて

3

many-to-many relationshipを保存するテーブルが必要です。
この関係は、各果物に多くの変種があり、各変種が多くの果実に適しているため、多くのものがあります。

だから、あなたは、このようなfruit_variantsテーブル必要があります。

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

をし、また、あなたのFruitモデル

public function variants() 
{ 
    return $this->belongsToMany('Fruit', 'fruit_variants', 'fruit_id', 'variant_id'); 
} 
にこの variantsメソッドを追加する必要があります