添加where()on()急切加载。

时间:2018-06-07 20:30:59

标签: php laravel eloquent

我在这里遇到一个但错综复杂的问题,我会尽力解释它。

首先我有3个模型,CourseStudentQuiz

  • 学生和课程处于多对多关系中
  • 学生和测验有多对多的关系
  • 测验与课程分别属于一对多关系

我有以下查询:

 $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模型相关的测验。

为了全面了解,之后我循环浏览vue组件中的$students变量:

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

我正在使用Student模型进行循环因为我还检索了除测验之外的其他属性。

但当然,当我这样查询时,我最终会检索所有course_id = $course_id的学生的所有问题。

必需

我想过滤结果以获得学生的测验,如果他们有course_id任何当前课程的ID。

2 个答案:

答案 0 :(得分:1)

您可以使用whereHas功能完成工作,如下所示:

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

我认为如果您遵循惯例,则应该Quiz模型与studentscourse交叉检查,它由您决定。您可以在Laravel Documentation上找到更多信息。希望这可以解决您的问题。

答案 1 :(得分:0)

当然,在我发布问题之后,我在网上随机找到答案,这里是:

import pandas as pd

df = pd.read_csv('location/filename.csv')
df['Name'] = df['Name'].apply(lambda x: x.capitalize())
print(df['Name'].unique()) #Now you will get all the unique names.