связь между таблицами Laravel

#laravel #many-to-many #laravel-relations

Вопрос:

У меня есть 3 таблицы: одна для курсов и таблица для классов, другая таблица для категорий, в которых категории могут иметь несколько классов. Я хочу показать список курсов с именем класса и именем категории. Я создаю сводную таблицу между классами и категориями, которая также содержит название курса, но я не могу показать catgory_name из категорий таблиц, и я не знаю, правильно ли это

//способ отображения курсов

 public function index()
{
        
   $categories=Course_category::all();
   return view('teacher.courses')->with('categories',$categories);
}
 

лезвие

      @foreach ($categories->classe as $item)
                    {{$item->category_name}}
     @endforeach
 

модель категории

      protected $table = 'categories';
            protected $fillable =['id','category_name','categorie_image'];
    
    
            /**
             * The roles that belong to the Course_category
             *
             * @return IlluminateDatabaseEloquentRelationsBelongsToMany
             */
    
            public function classe(){
    
                return $this -> belongsToMany('AppClasse','classe_categorie','categorie_id','classe_id');
            }
 

классная модель

  protected $table = 'classes';
    protected $fillable=['id','classe_name','classe_image'];
    public function course_categorie() {

        return $this -> belongsToMany('AppCourse_category','classe_categorie','classe_id','categorie_id');
    }
 

Ответ №1:

Вы должны перебирать классы, а не категории:

  @foreach ($categories->classe as $item)
    {{$item->category_name}}
 @endforeach
 

Это должно быть

  @foreach ($categories as $item)
    {{$item->classe->classe_name}}
    {{$item->category_name}}
 @endforeach
 

Поскольку вы хотите показать классы, почему бы вам не собрать все Classe s в контроллере и не начать оттуда? Если только вы не хотите группироваться по категориям, что легко сделать с красноречивыми.

Комментарии:

1. я хочу показать имя курса из сводной таблицы с именем категории из модели категории и именем класса из модели класса модель класса не содержит имени catgeory

2. Свойство [имя_класса] не существует в этом экземпляре коллекции

Ответ №2:

спасибо вам за вашу помощь, я нашел решение

 $categories=Course_category::with('classe')->get(); 
 

и я использую цикл внутри цикла для сбора

 @foreach ($categories as $item)
            {{-- {{$item->course_category->category_name}} --}}
              @foreach ($item->classe as $cat)
                  {{$cat->course_name}}
                  {{$cat->classe_name}}
              @endforeach
            @endforeach