Отношение один ко многим Laravel получает ошибку - PullRequest
0 голосов
/ 04 мая 2019

У меня есть связь между категорией видео и видео курсами, одна категория может иметь много курсов, я хочу получить видео курсы с помощью пункта категории видео, но получаю сообщение об ошибке

Категория видео Модель

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);
    }

}

My View

@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 Неизвестный столбец 'video_courses.video_category_id' в 'предложении where' (SQL: выберите * из video_courses, где video_courses. video_category_id = 2 и video_courses. video_category_id - не ноль и video_courses. deleted_at ноль) (представление: C: \ xampp \ htdocs \ QuickLMS \ resources \ views \ category.blade.php)

Ответы [ 4 ]

3 голосов
/ 04 мая 2019

Во втором параметре каждого ownTo и 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 в качестве внешнего ключа в вашей таблице.Передайте имя столбца внешнего ключа во втором параметре.

0 голосов
/ 04 мая 2019

Введите ключ для отношения в VideoCategory Модель

public function video_courses() {
return $this->hasMany(VideoCourse::class, 'video_course_id');
} 
0 голосов
/ 04 мая 2019

Если вы используете другой ключ для id, убедитесь, что вы указали его в методе отношений, например:

public function video_courses() {
    // second parameter is the foreign key.
    return $this->hasMany(VideoCourse::class, 'video_course_id');
}   
0 голосов
/ 04 мая 2019

Похоже, что ваши столбцы таблицы не соответствуют вашим отношениям "многие к одному". Ваша таблица video_courses должна иметь столбец video_category_id. Таким образом, каждая запись курса указывает, к какой категории она относится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...