具有附加数据的关系 BelongsToMany

Relationship BelongToMany with additional data

我有 3 tables:

  1. 课程(有category_id)
  2. 作者
  3. 类别(课程)

在我的 Authors 模型中,我添加了:

    public function courses () {
        return $this->belongsToMany('App\Course', 'courses2authors')->where('status','=', 1);
}

"courses2authors"是支点table。 然后在我的控制器中我检索课程信息:

$authors = Author::where('status', '=', 1)->orderBy('pos')->with('courses')->get();

没关系,但是我只有category_id在->课程中,如何在模型关系中添加类别名称。

我尝试类似的方法:

return $this->belongsToMany('App\Course', 'courses2authors')
->where('status','=', 1)->join('categories', 'categories.id', '=',
'courses.category_id')->select('categories.name as categoria');

但是这种方式只取类名,不取课程数据。

您可以在 课程 模型中定义 belongsTo 关系 类别

课程模型

public function categories () {
     return $this->belongsTo('App\Categories', 'category_id');
}

在使用 Courses 检索 Author 时,您可以像这样使用。 (控制器代码)

$authors = Author::where('status', '=', 1)->orderBy('pos')
    ->with('courses',function($query){
         $query->with('categories);
})->get();

如果你不想这样使用,那么你可以在 Courses 模型中设置 $with 属性。

protected $with = ['categories']; // default with define here.

在控制器中使用:-

$authors = Author::where('status', '=', 1)->orderBy('pos')
        ->with('courses')->get();