1
我有两个型号,students
和languages
。每个学生都可以通过透视表student_language
一定技能说话ñ语言。例如迈克会讲英语与3个技能,并与德国的7订购透视列
这里一个技能是学生型号:
class Student extends \Eloquent {
public function languages()
{
return $this->belongsToMany('Language')->withPivot('skill');
}
}
这里是语言型号:
class Language extends \Eloquent {
public function students()
{
return $this->belongsToMany('Student')->withPivot('quality');
}
}
我怎样才能像讲一种语言的学生名单,并通过他们的技术水平排序呢?在流利它会是这样,但我不能使用联接,需要把它写在雄辩:
$students = DB::table('students')
->join('student_language', 'students.id', '=', 'student_language.student_id')
->where('student_language.language_id', '=', '1')
->orderBy("student_user.skill", "desc")
->get();
谢谢你的任何投入。
编辑:更新
谢谢您的回答。它确实有效,但速度非常缓慢。我甚至有'允许的内存大小被耗尽'异常。有更快的解决方案吗? – Adrenaxus
Arifs答案是正确的,因为你说你不能使用连接。上面的代码将包含一个嵌套select,它在mysql中非常慢(在Postgresql中速度要快得多)。最快的方法是使用连接,但你说你不能这样做? (为什么你不能使用连接?) – delatbabel