Добавление куда () на с () нетерпеливой загрузки. - PullRequest
0 голосов
/ 07 июня 2018

У меня есть небольшая, но запутанная проблема, я постараюсь объяснить ее как можно лучше.

Первая У меня 3 модели, Course, StudentQuiz,

  • Учащийся и курс находятся в отношениях многие ко многим
  • Учащийся и тест находятся в отношениях многие ко многим
  • Тесты и курсыв отношении один ко многим соответственно

И у меня есть следующий запрос:

 $course = Course::whereSlug($slug)->first(); // Some Course

 $quizzes = $course->students()->with('quizzes'); // <-- Here lies the problem.

В последнем предложении я хочу отредактировать этот запрос, чтобы он был примерно таким:

 $quizzes = $course->students()->with('quizzes)->where('course_id', $course->id);

Я хочу сделать это так, потому что Я хочу получить только тесты, связанные как с моделью Student, так и с моделью Course.

Чтобы дать вам полную картину , после этого я перебираю переменную $students в компоненте vue следующим образом:

<div v-for="student in students"></div>

Я зацикливаюсь на модели Student, потому чтоЯ также получаю другие свойства, кроме тестов.

Но, конечно, когда я делаю это как запрос, я в конечном итоге получаю все вопросы для всех учащихся, у которых есть course_id = $course_id.

Обязательно

Я хочу отфильтровать результаты, чтобы получить тесты студента ТОЛЬКО , если у них есть course_id любого идентификатора текущего курса.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Конечно, после того, как я разместил вопрос, я случайно нашел ответ в Интернете, вот он:

$quizzes = $course->students()->with(['quizzes'=> function($query) use ($course) {
              $query->where('course_id', $course->id);
           }])->get();
0 голосов
/ 07 июня 2018

Вы можете использовать функцию whereHas для выполнения своей работы, что-то вроде этого:

$quizzes = $course
        ->students()
        ->whereHas('quizzes', function($q){
            $q->where('course_id', $course->id);
        })
        ->with('quizzes)
        ->get();

Я думаю, что если вы следуете соглашению, вы должны взять модель Quiz с students и courseпроверено, это до вас.Вы можете узнать больше о Документация Laravel Надеюсь, что это решит вашу проблему.

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