Показать данные из 3 таблиц Laravel - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь отобразить данные из 3 таблиц следующим образом ->

название курса |название теста |количество вопросов


название курса1 |тестовое имя1 |3

У меня есть связь между Тестом и Вопросом 1: N

Test.php

public $table = 'Test';

protected $fillable = [
    'name',
];

public function question()
{
    return $this->hasMany('App\Question');
}

Question.php

public $table = 'Question';

public function test()
{
   return $this->belongsTo('App\Test');
}

TestController.php

public function courses(Subject $subject) {
    $subject_with_courses = Subject::with(['course'])->where('id', 

    $subject['id'])->first();

    $courses = Course::with(['test'])->get();
    $questions = $courses->question;

    return view('admin.test.list_course', [
        'courses' => $courses,
        'questions' => $questions,
        'subject' => $subject
    ]);
}

list_course.php

@foreach($courses as $course)
    <tr>
        <td>
            {{ $course->name }}
        </td>
        <td>
            @foreach($course->test as $test)
                {{ $test->name }}
            @endforeach
        </td>
        <td>
            @foreach($course->questions as $test)
                {{ $test->count() }}
            @endforeach
        </td>
    </tr>
@endforeach

Я получаю ошибку "Свойство[вопрос] не существует в этом экземпляре коллекции. "

Кто-нибудь может мне помочь с этим, пожалуйста?Спасибо !!

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Вы пытаетесь получить доступ к свойству модели курса, но $courses является набором Course

0 голосов
/ 08 ноября 2018

Вы можете нетерпеливо загрузить вопросы в вашем контроллере:

$courses = Course::with(['test', 'test.question'])->get();

Вопросы относятся к тесту, а не к курсу, поэтому вы не можете позвонить $course->question по модели курса.

По вашему мнению:

@foreach($courses as $course)
    <tr>
        <td>
            {{ $course->name }}
        </td>

        <td>
            @foreach($course->test as $test)
                {{ $test->name }}
            @endforeach
        </td>

        <td>
            @foreach($course->test as $test)
                {{ $test->question->count() }}
            @endforeach
        </td>
    </tr>
@endforeach
0 голосов
/ 08 ноября 2018

Вот что выдает ошибку:

TestController.php:

$courses = Course::with(['test'])->get();
$questions = $courses->question; // <---- $courses is a Collection not a Model

Вы пытаетесь получить доступ к свойству вопросов Модели, но $courses является коллекцией моделей.

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