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

Database 简单查询laravel 4表和透视表输出,database,laravel,pivot,eloquent,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 $th

我相信这应该是非常简单的,但由于某些原因它不是

我有桌子

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'
使用Laravel4.1。我对拉雷维尔还很陌生,也许我在这方面有点想法,但还没有找到一个有效的解决办法

我试了好几种方法,但都错了。没有学校id搜索的基本方法是:

      $students = Student::with('schools')->get();

感谢您的帮助。

您可能有一个学校模型,它应该有这样一种方法

public function students(){
    return $this->belongsToMany('Student');
}
那你就可以了

$school = School::with('students')->find($id);
var_dump($school->students());
请看,“急切负载约束”部分告诉您需要什么

这里有一个例子说明你的情况

 $students = Student::with('schools', function($query){
          $query->where('school_id', '=', 1);
 })->get();

根据您的需要,有几种方法:

使用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
,后者将始终返回集合。

您的模型叫什么?我有一个更新问题要说明我用数组尝试了这个,但它不起作用。您的出现此错误:explode()要求参数2为字符串,object given您在哪里使用数组?关于where('school_id','=',ARRAY)?对于你的,我完全按照发布的那样做了,但它不起作用。在此之前,我尝试过$users=$students=Student::with(数组('school'=>function($query){$query->where('school_id','=','1');}))->get();根据laravel文档,视图输出为空。我再次检查了该表,其中有一个school_student record id=1、student_id=7、school_id=1以及student record id=7和school record id=1。这也会通过所有的用户表等等。{“查询”:“select*from
users
where
id
=?limit 1”,“绑定”:[“25”],“time”:0.69},{“查询”:“选择*from
throttle
where
user\u id
=?limit 1”…尽管我仍然担心这似乎会通过很多查询运行。