简单查询laravel 4表和数据透视表输出

时间:2014-06-30 09:42:36

标签: database laravel pivot eloquent

我相信这应该很简单,但由于某种原因,它不是。

我有桌子

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();

帮助表示赞赏。

3 个答案:

答案 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();

回答您的一条评论:findget不同,首先会返回单个模型或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();