【发布时间】:2020-10-06 11:31:15
【问题描述】:
我有这两个模型: 首先是与 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');
}
}
课程模型属于分类表:
<?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,我在课程控制器中制作了这个方法:
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');
});
【问题讨论】:
-
我认为你不需要这个
$request->ismethod('post'),因为如果你的路由定义为post,那么它只接受post请求,那么你的控制器就会执行 -
谢谢亲爱的,但我已经发布并进入路由,我将添加路由到问题
-
将是
$catagory = Catagory::where('catagory' , $request->catagory)->first();[first() 在最后一个] 然后你可以得到$catagory->Course->id;也为$trainer = Trainer::where('trainer' , $request->trainer)->first();最好的方法,通过$request->catagory_id与请求,而不是$request->catagory[名称] -
你为什么要发名字,你应该发
category_id和trainer_id -
因为他们看重的不是 id 而是他们的标题
标签: php laravel model controller updates