【发布时间】:2020-08-20 17:09:34
【问题描述】:
我正在 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 即可访问通道
【问题讨论】:
-
Laravel 中没有
belongsToThrough方法(hasManyThrough的逆方法),因此您可以使用访问器(如下所述),结合Thread::with('section.channel') ...执行预加载,或使用添加该关系的外部包,例如 github.com/staudenmeir/belongs-to-through
标签: laravel eloquent relationship