Laravel:如何使用附加方法在三向枢轴 table 的情况下插入数据

Laravel: How to insert data in case of three way pivot table using attach method

这是我的 tables

id
board_name

id
class_name

科目

id
subject_name

board_classes

id
board_id
class_id

board_class_subjects

id
board_id
class_id
subject_id

我在我的模型中写了以下关联

Board.php

public function classes()
{
 return $this->belongsToMany('Clas','board_classes','board_id','class_id');
}

Clas.php

public function subjects()
{
    return $this->belongsToMany('Subject','board_class_subjects','class_id', 'subject_id');
}

我正在尝试使用以下代码在数据透视表 table board_class_subjects 中插入示例数据:

$data = array();
$data['board_id'] = 1;
$data['class_id'] = 1;
$data['subject_id'] = 1;

$pivot = Board::find(1);
$pivot->subjects()->attach($data);

但出现如下错误:

Call to undefined method Illuminate\Database\Query\Builder::subjects()

我知道在我的 Board 模型中没有名称为 subjects 的方法,但不确定如何实现它,所以我可以使用 attach 方法在 board_class_subjects 数据透视表 table 中插入数据。我应该在 Board 模型中添加另一个名为 sections 的方法,类似于 "classes" 方法吗?

从技术上讲,Board 与从 Clas(s)Subject 的关系无关。但是,您可以像对待任何其他 附加数据透视列 一样对待 board_id 并像记录的那样插入它 here

$subjectId = 1;
$boardId = 1;
$class = Clas::find(1);
$class->subjects()->attach($subjectId, ['board_id' => $boardId]);

或者,如果您已经收集了所有 id,您也可以只在枢轴上插入一个 table。 (attach() 反正也没做什么事)

$data = array();
$data['board_id'] = 1;
$data['class_id'] = 1;
$data['subject_id'] = 1;
DB::table('board_class_subjects')->insert($data);

我认为这是一个解决方案 many-to-many 与枢轴 table board_classessubjects[=22= 的关系]

board_classes

id
board_id
class_id

board_class_subjects

id
board_class_id
subject_id