我相信这应该很简单,但由于某种原因,它不是。
我有桌子
student
|id|name|...etc
school
|id|name|....etc
school_student
|id|school_id|student_id
学生模特
public function schools()
{
return $this->belongsToMany('School');
}
学校模式
public function students(){
return $this->belongsToMany('Student');
}
我只想输出属于school_id = 1的学生。
换句话说:
SELECT * FROM students LEFT JOIN school_student ON student.id=school_student.student_id WHERE school_id='1'
使用Laravel 4.1。我对Laravel相当新,也许我对此有一些心理障碍,但还没有找到一个有效的解决方案。
我尝试了几种方法,但都错了。没有school_id搜索的基本是:
$students = Student::with('schools')->get();
帮助表示赞赏。
答案 0 :(得分:1)
根据您的需要,有几种方法:
使用ORM关系:
// 1st query to fetch school, 2nd query to fecth the students
$school = School::find($shoolId);
$school->students; // Collection of related students
// 1 query with joins
Student::whereHas('school', function ($q) use ($schoolId) {
$q->where('schools.id', $schoolId);
})->get();
使用手动连接:
// 1 query with join
Student::join('school_student as ss', function ($q) use ($schoolId) {
$q->on('ss.student_id', '=', 'students.id')
->where('ss.school_id', '=', $schoolId);
})->get();
回答您的一条评论:find
和get
不同,首先会返回单个模型或null
,后者将始终返回集合。
答案 1 :(得分:0)
你可能有一个学校模型应该有这样的方法......
public function students(){
return $this->belongsToMany('Student');
}
然后你可以做
$school = School::with('students')->find($id);
var_dump($school->students());
答案 2 :(得分:0)
查看http://laravel.com/docs/eloquent#eager-loading,“Eager Load Constraints”部分告诉您需要什么
这里有一个适合你情况的例子
$students = Student::with('schools', function($query){
$query->where('school_id', '=', 1);
})->get();