在laravel 5.5

时间:2018-01-26 10:17:33

标签: laravel

我有一种情况,我有实体,基地,可以包含成分,饮料和基地本身。我知道如何与成分和饮料建立关系,但是当谈到基地内的基地时,我不知道该怎么做。任何帮助,将不胜感激。我不能使用带有parent_id的解决方案,因为一个基础可以属于其他几个基础,并且不希望在基表中重复。我需要一些带有数据透视表的解决方案。

2 个答案:

答案 0 :(得分:2)

假设parent_id表中有bases

class Base extends Model
{
    public function children()
    {
        return $this->hasMany(Base::class,'parent_id','id');
    }

    public function parent()
    {
      return $this->belongsTo(Base::class,'id','parent_id');
    }
}

然后你可以像这样轻松访问基地的基础

foreach($base->children() as $childBase){

   $childBase->ingredients();
   $childBase->drinks();
}

答案 1 :(得分:0)

最后我找到了解决方案,自引用实体可以通过自身与多对多关系来完成。

模型关系如下所示:

class BaseDrink extends Model {

  public function drinkbase(){

     return $this
        ->belongsToMany('App\BaseDrink', 'basedrink_basedrink','basedrink_id', 'parent_basedrink_id')
        ->withPivot('created_by')
        ->withPivot('last_modified_by')
        ->withPivot('id')
        ->withTimestamps();
     }
 }