Laravel:如何使用attach方法在三向数据透视表的情况下插入数据

时间:2015-02-18 09:49:52

标签: laravel laravel-4 insert pivot-table record

这是我的表格

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"方法?

2 个答案:

答案 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