Laravel雄辩地将数据存储到数据透视表

时间:2018-11-03 17:04:17

标签: php laravel view eloquent laravel-blade

我正在尝试将数据从表单存储到DB。我有带有列subjectsubjectType(Economic, Informatic subject)subjectType_subject(pivot table)的表。我可以将数据存储到Subject表中,但是我需要将ID存储到subjectType_subject表中。我认为我有一个下拉式导航栏-经济学科和信息学学科。如果要添加经济主题,则需要在数据透视表中添加ID以显示它。

请问我该怎么做?

现在我只能将数据存储到“主题”表中,并且它不会出现在“经济主题”部分:

SubjectController

public function create() {
}

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required',
        'abbreviation' => 'required',
        'description' => ''
    ]);

    $subject = new Subject();
    $subject->name = $request->input('name');
    $subject->abbreviation = $request->input('abbreviation');
    $subject->description = $request->input('description');

    $subject->save();

    return redirect()->back()
         ->with('success', 'Úspěšne jsi vytvořil nový předmět.');
    }
}

主题模型

public $table = 'Subject';

protected $fillable = [
    'name',
    'abbreviation',
    'description'
];

public function subject_type() {
    return $this->belongsToMany('App\Subject_type',  'subjectType_subject');
}

SubjectType模型

public $table = 'SubjectType';

public function subject() {
    return $this->belongsToMany('App\Subject', 'subjectType_subject');
}

2 个答案:

答案 0 :(得分:0)

只需在下面添加雄辩的查询

 $subject->save();

赞:

$subjecttype= new SubjectType;
$subjecttype->subjectid= $request->input(‘subjectid’);
$subjecttype->save();

  return redirect()->back()
         ->with('success', 'Úspěšne jsi vytvořil nový předmět.')

答案 1 :(得分:0)

首先,尝试修正您的命名约定。如果遵循laravel的命名约定,事情会容易得多。 Here is the guide

  • 表名应为snake_case(将subjectType更改为subject_type
  • 数据透视表应为按字母顺序排列的单一模型名称(将subjectType_subject更改为subject_subject_type
  • belongsToMany 应该具有复数函数名称。 (将public function subject_type()更改为public function subject_types(),也将public function subject()更改为public function subjects()

然后使用laravels attach关键字填充数据透视表。

$subject = new Subject();
$subject->name = $request->input('name');
$subject->abbreviation = $request->input('abbreviation');
$subject->description = $request->input('description');
$subject->save();

$subject->subject_types()->attach(id_of_your_subject_type); // for example, 
             the id of economics in your subject_type table is 1, then put 1 inside the parenthesis