【问题标题】:PHP : update related id in laravelPHP:更新laravel中的相关ID
【发布时间】: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-&gt;ismethod('post'),因为如果你的路由定义为post,那么它只接受post请求,那么你的控制器就会执行
  • 谢谢亲爱的,但我已经发布并进入路由,我将添加路由到问题
  • 将是$catagory = Catagory::where('catagory' , $request-&gt;catagory)-&gt;first(); [first() 在最后一个] 然后你可以得到$catagory-&gt;Course-&gt;id; 也为$trainer = Trainer::where('trainer' , $request-&gt;trainer)-&gt;first(); 最好的方法,通过$request-&gt;catagory_id 与请求,而不是$request-&gt;catagory [名称]
  • 你为什么要发名字,你应该发category_id trainer_id
  • 因为他们看重的不是 id 而是他们的标题

标签: php laravel model controller updates


【解决方案1】:

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

我不知道你为什么要在类别和课程之间创建一对多的关系,但是如果一个课程可以有更多的类别,你应该使用多对多的关系。如果课程以外的任何其他事物都可以有类别,则需要多对多的多态关系。

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

【讨论】:

  • 只需添加 first() 并更改 $course->trainer_id = $trainer->Course->id;到 $course->trainer_id = $trainer->id;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2015-06-13
相关资源
最近更新 更多