PHP : 更新 laravel 中的相关 ID

PHP : update related id in laravel

我有这两个型号: 首先是与 id 中的课程相关的类别:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Catagory extends Model
{
    use HasFactory;

    protected $fillable = [
        'catagory',
    ];

    public function Course()
    {
        return $this->hasMany('App\Models\Course');
    }
}

课程模型属于类别table :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Course extends Model
{
    use HasFactory;
    protected $fillable = [
        'course_name',
        'trainer_id',
        'catagory_id',
        'price',
        'video_link',
        'image_link',
    ];
// belongs
    public function Catagory()
    {
        return $this->belongsTo('App\Models\Catagory','catagory_id');
    }

// has
    public function Lession()
    {
        return $this->hasMany('App\Models\Lession');
    }
    public function Order()
    {
        return $this->hasMany('App\Models\Order');
    }
}

现在我制作了控制器来更新课程,但是类别名称是随请求而不是类别 ID 一起发送的,我想在课程中编辑类别 ID table,我在课程控制器中制作了这个方法:

public function update(Request $request ,$id)
        {
            $course = Course::find($id);
            
            if ($request->ismethod('post')){
                $catagory = Catagory::where('catagory' , $request->catagory);
                $trainer = Trainer::where('trainer' , $request->trainer);
   
                $course->course_name = $request->course_name;
                $course->trainer_id = $trainer->Course->id;
                $course->catagory_id = $catagory->Course->id;
                $course->price = $request->price;
                $course->video_link=$request->video_link;
                $course->image_link=$request->image_link;

                $course->save();
                return back();
            }
            else {
                $arr['course']=$course;
                return view('admin.courses.course_update',$arr);
            }
        }

我知道这是错误的,但是根据请求附带的类别名称更新类别 ID 的正确方法是什么?

我的路线:

Route::prefix('course')->group(function () {
        //Edit Courses
        Route::get('edit', [App\Http\Controllers\course\Course_controller::class,'index'])->name('edit_course');
        //Show courses to add
        Route::get('/', [App\Http\Controllers\course\Course_controller::class,'add'])->name('show_course');
        //Add Course
        Route::post('/', [App\Http\Controllers\course\Course_controller::class,'add'])->name('add_course');
        //Show Course to update
        Route::get('update/{id}', [App\Http\Controllers\course\Course_controller::class,'update'])->name('show_update_course');
        //Update Course
        Route::post('update/{id}', [App\Http\Controllers\course\Course_controller::class,'update'])->name('update_course');
        // Delete Course
        Route::get('delete/{id}', [App\Http\Controllers\course\Course_controller::class,'delete'])->name('delete_course');
    });

您没有获得类别或培训师。添加 ->first() 到这些行的末尾。

我不知道你为什么要在类别和课程之间创建 one-to-many 关系,但如果一门课程可以有更多类别,你应该使用 many-to-many 关系。如果除了 course 之外的任何其他东西都可以有一个类别,你需要 many-to-many 多态关系。

为了遵循命名约定,最好在类别模型中使用“课程”而不是课程。