我正在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
就可以访问频道
答案 0 :(得分:1)
如果您确实要使用,请使用附件。
public function getChannelAttribute()
{
return $this->section->channel;
}
答案 1 :(得分:0)
如果为此使用软件包没有问题,请使用https://github.com/staudenmeir/eloquent-has-many-deep。您可以具有任何级别的关系。
有关详细信息,请阅读包装的用法部分。