访问父母关系的父母laravel

时间:2020-08-20 17:09:34

标签: laravel eloquent relationship

我正在laravel中构建一个应用程序,其中每个通道都有一些部分,您可以在这些部分中发布线程。我想从线程访问通道。 到目前为止的层次是 -渠道 - 部分 ---线程

这是三个模型类

频道


use Illuminate\Database\Eloquent\Model;

class Channel extends Model
{
    public function users(){
        return $this->belongsToMany('App\User');
    }
    public function posts(){
        return $this->hasMany('App\Post');
    }
    public function isSubscribed($id){
        return $this->users()->find($id);
    }
    public function sections(){
        return $this->hasMany('App\Section');
    }
}

部分

{
    public function channel(){
        return $this->belongsTo('App\Channel');
    }

    public function threads(){
        return $this->hasMany('App\Thread');
    }
}

线程

{
    protected $fillable=['title','body','solved'];

    public function solutions(){
        return $this->hasMany('App\Solution');
    }
    public function comments(){
        return $this->hasMany('App\ThreadComment');
    }
    public function section(){
        return $this->belongsTo('App\Section');
    }
    public function arguments(){
        return $this->belongsToMany('App\Argument');
    }
    public function user(){
        return $this->belongsTo('App\User');
    }
    public function reports(){
        return $this->morphTo('App\Report','reportable');
    }
}

我想做的是在线程类中有一个channel()方法,该方法使我无需每次都$thread->section->channel就可以访问频道

2 个答案:

答案 0 :(得分:1)

如果您确实要使用,请使用附件。

public function getChannelAttribute()
{
    return $this->section->channel;
}

答案 1 :(得分:0)

如果为此使用软件包没有问题,请使用https://github.com/staudenmeir/eloquent-has-many-deep。您可以具有任何级别的关系。

有关详细信息,请阅读包装的用法部分。