这是我的表格
板
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');
}
我正在尝试使用以下代码在数据透视表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()
我知道主板模型中没有名称主题的方法,但不知道如何实现它以便我可以使用attach
方法在board_class_subjects
数据透视表中插入数据。我应该在Board模型中添加另一个名为 sections 的方法,类似于" classes"方法?
答案 0 :(得分:1)
从技术上讲,Board
与从Clas(s)
到Subject
的关系无关。但是,您可以像处理其他其他数据透视列一样处理board_id
,并像记录here一样插入
$subjectId = 1;
$boardId = 1;
$class = Clas::find(1);
$class->subjects()->attach($subjectId, ['board_id' => $boardId]);
或者,如果您已经收集了所有ID,您也可以在数据透视表上进行插入。 (attach()
无论如何都不会做其他事情)
$data = array();
$data['board_id'] = 1;
$data['class_id'] = 1;
$data['subject_id'] = 1;
DB::table('board_class_subjects')->insert($data);
答案 1 :(得分:0)
我认为这是与数据透视表 board_classes 和主题
的多对多关系的解决方案<强> board_classes 强>
id
board_id
class_id
<强> board_class_subjects 强>
id
board_class_id
subject_id