Php 在with函数的子查询中使用雄辩模型属性

Php 在with函数的子查询中使用雄辩模型属性,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我的问题可能会让人困惑,因为我已经开始学习拉威尔 我可以在with函数的子查询中使用雄辩的模型属性吗 我有班级、学生和成绩表。我希望得到 $classes = [{id:1, name:'maths', students:[{id:2, name: john, grade:B},{id:1, name: Mac, grade:C}]}, {id:2, name:'physics', students:[{id:2, name: john, grade:null},{id:1, name: Mac

我的问题可能会让人困惑,因为我已经开始学习拉威尔

我可以在with函数的子查询中使用雄辩的模型属性吗

我有班级、学生和成绩表。我希望得到

$classes = [{id:1, name:'maths', students:[{id:2, name: john,
grade:B},{id:1, name: Mac, grade:C}]}, {id:2, name:'physics',
students:[{id:2, name: john, grade:null},{id:1, name: Mac,
grade:null}]}]
例如:

        $classes = Class::with(['students' => function($query){ 
        ->leftJoin('grades', 'grades.student_id', '=', 'students.id')
        }])->get()->toJSON();
此查询未选择相关类的正确等级。我希望在联接条件中使用class::id=grades.class\u id


我使用leftJoin是因为某些类可能尚未发布其等级。

您需要这样做:

 $classes = Class::with(['students' => function($query){ 
        ->leftJoin('grades', function($join) {
             $join->on('grades.student_id', '=', 'students.id');
             $join->on('grades.class_id', '=', 'class.id');
          })
        }])->get()->toJSON();

最后,我得到了解决方案,虽然不是最好的解决方案,但它奏效了。感谢@Marcin Nabialek和@lukasgeiter。这只是简单地通过数据透视表检查学生

bcoz通过许多联接表花费了太多时间


希望得到更好的解决方案

嗨,马辛,谢谢你的帮助,但我试过了。它导致以下错误SQLSTATE[HY000]:一般错误:1没有此类列:类。id@RyanExlay它可能应该是classes.id,或者是类模型的任何表名is@lukasgeiter,同样的错误出现了。无论如何,谢谢你的帮助。我不能在学生中调用类属性。我试图使用hasManyThrough关系学生->班级->年级关系。
 $classes = Class::with(['students' => function($query){ 
        $query->leftJoin('grades', function($join) {
             $join->on('grades.student_id', '=', 'students.id');
             $join->on('students.id', '=', 'class_student.student_id');
             $join->on('class_student.class_id', '=', 'grades.class_id');
          })
        }])->get()->toJSON();