一对多关系Laravel出现错误

时间:2019-05-04 11:03:11

标签: laravel eloquent

我在“视频类别”和“视频课程”之间有关系,一个类别可以有很多课程,我想通过视频类别项获取视频课程,但会出错

视频类别模型

class VideoCategory extends Model
{
    public function video_courses(){
        return $this->hasMany('App\VideoCourse');
    }   
}

视频课程模型

class VideoCourse extends Model
{

    public function video_category()
    {
        return $this->belongsTo(VideoCategory::class);
    }

}

我的观点

@forelse ($category->video_courses as $video_course)
   <a href="#"">{{$course->title}}</a>
@empty
   <p>No Video Courses Available</p>
@endforelse

错误: (4/4)ErrorException SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ video_courses.video_category_id”(SQL:从video_courses中选择*,其中video_coursesvideo_category_id = 2和{{ 1}}。video_courses不为空,video_category_idvideo_courses为空)(视图:C:\ xampp \ htdocs \ QuickLMS \ resources \ views \ category.blade.php)< / p>

4 个答案:

答案 0 :(得分:3)

在每个属于和hasMany的第二个参数中,您必须定义与这两个表相关的外键:

class VideoCourse extends Model
{

    public function video_category()
    {
       return $this->belongsTo(VideoCategory::class, 'video_category_id');
    }

}


class VideoCategory extends Model
{
    public function video_courses(){
        return $this->hasMany(VideoCourse::class,'video_category_id');
    }   
}

该错误表明您在表中没有video_category_id字段作为外键。在第二个参数中传递您的外键列名称。

答案 1 :(得分:0)

看起来您的表列与多对一关系不匹配。您的video_courses表应具有video_category_id列。这样,每个课程记录都会引用它所属的类别。

答案 2 :(得分:0)

如果您为id使用其他密钥,请确保在关联方法中提供该密钥,例如:

public function video_courses() {
    // second parameter is the foreign key.
    return $this->hasMany(VideoCourse::class, 'video_course_id');
}   

答案 3 :(得分:0)

VideoCategory模型中提供关系的密钥

public function video_courses() {
return $this->hasMany(VideoCourse::class, 'video_course_id');
}