2016-09-27 3 views
1

после того, как потратил часы на решение этой проблемы, я хочу попросить вас о помощи.Метод отношения Laravel не работает

I имеют следующую структуру:

Модель: Student.php

class Student extends Model 
{ 
    protected $table = 'studenten'; 

    public function kurs() { 
     return $this->belongsTo(Kurs::class); 
    } 
} 

Модель: Kurs.php

class Kurs extends Model 
{ 
    protected $table = 'kurse'; 

    public function studenten() { 
     return $this->hasMany(Student::class); 
    } 
} 

Контроллер: KursController.php

class KursController extends Controller 
{ 
    public function showStudenten() { 
     return view('example.studenten', [ 
      'kurse' => Kurs::all(), 
     ]); 
    } 
} 

Вид: пример \ studenten.blade.php

@foreach($kurse as $kurs) 
    <p>{{ $kurs->title }}, {{ $kurs->id }}</p> 
    @foreach($kurs->studenten() as $student)) 
     <p>{{ $student->name }}</p> 
    @endforeach 
@endforeach 

Таблица: курсы Зарегистрироваться

id | title | created_at | updated at 

Таблица: Studenten

id | name | kurs_id | created_at | updated_at 

Я пытаюсь вывести студентов, принадлежащих к каждому курсу. Где моя ошибка? Я попытался указать внешний ключ 'kurs_id' в моих методах модели, но это не сработает. Не могли бы вы помочь мне найти мою ошибку?

Заранее спасибо.

+0

Какую ошибку вы получаете? – Squazz

+0

Я не получаю ошибки, но ничего не отображается, несмотря на «Курс» – Johannes

ответ

3

Попробуйте

в контроллере

public function showStudenten() { 
    return view('example.studenten', [ 
     'kurse' => Kurs::with('studenten')->get(), 
    ]); 
} 

В файле просмотра

@foreach($kurse as $kurs) 
<p>{{ $kurs->title }}, {{ $kurs->id }}</p> 
    @foreach($kurs->studenten as $student)) 
    <p>{{ $student->name }}</p> 
    @endforeach 
@endforeach 
+0

Я пробовал это раньше, без эффекта, но теперь это похоже на работу. Большое спасибо! Не могли бы вы объяснить, почему мне здесь не нужен(), пожалуйста? – Johannes

+1

@Johannes - 'studenten' - массив не функция – Derek

+1

Он вернет объект массива, в красноречивой функции Laravel вам не нужно использовать(). Он возвращает объект – Vikash

Смежные вопросы