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 多态关系。
为了遵循命名约定,最好在类别模型中使用“课程”而不是课程。
我有这两个型号: 首先是与 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 多态关系。
为了遵循命名约定,最好在类别模型中使用“课程”而不是课程。