使用Laravel Eloquent更新带有复合键的表

问题描述 投票:2回答:1

我被一个复合键严重卡在桌子上。我正在尝试使用雄辩的方法通过两个主键过滤记录。但是我知道,雄辩的人不支持复合键。我经历了很多解决方案,但是没有一个解决方案足够清晰,初学者无法理解。

解决方案代码表示要使用以下代码编辑模型类:

<?php
class CustomerAddress extends Model {
    protected function setKeysForSaveQuery(Builder $query)
    {
        $query
            ->where('Customer_No', '=', $this->getAttribute('Customer_No'))
            ->where('Address_Name', '=', $this->getAttribute('Address_Name'));
        return $query;
    }

}

我想使用laravel提供的资源控制器执行更新功能:我的代码如下:

  /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $sem_course_id, $clo_id)
    {
        $id = $this->getKeyForSaveQuery();
        $request->validate([

            'assignments_weightage'=>'required',
            'quizes_weightage'=>'required',
            'project_weightage'=>'required',
            'class_participation_weightage'=>'required',
            'mid_weightage'=>'required',
            'final_weightage'=>'required',


        ]);

        $course = CoursesMarksScheme::find($clo_id,$sem_course_id); 
        $course->assignments_weightage =  $request->get('assignments_weightage');
        $course->quizes_weightage =  $request->get('quizes_weightage');
        $course->project_weightage = $request->get('project_weightage');
        $course->class_participation_weightage = $request->get('class_participation_weightage');
        $course->mid_weightage =  $request->get('mid_weightage');
        $course->final_weightage = $request->get('final_weightage');
        $course->save();

        return redirect('/coursesmarks');
    }

[另外,请指导我如何将资源控制器与主键一起使用,因为它会为一些参数抛出错误?请帮我。我确实筋疲力尽,看了很多在线文章,但无法解决问题。

php laravel eloquent laravel-5.8 composite-key
1个回答
0
投票

正如我所看到的,找到的解决方案代码仅用于更新,而并非用于查找。 Laravel在迁移过程中支持复合键,但并不雄辩。

也许更好,使用这样的简单解决方案,不要浪费时间:

CoursesMarksScheme::where(['clo_id' => $clo_id, 'sem_course_id' => $sem_course_id])
    ->update($request);

我想必填字段在CoursesMarksScheme模型的$ fillable变量中。

© www.soinside.com 2019 - 2024. All rights reserved.