2015-12-28 52 views
1

我有两个型号,studentslanguages。每个学生都可以通过透视表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(); 

谢谢你的任何投入。

编辑:更新

回答

1

我没有检查这一点,但你可以试试这个

Student::with(['languages' => function($q) { 
    $q->orderBy('pivot_skill', 'ASC'); 
}])->get(); 
+0

谢谢您的回答。它确实有效,但速度非常缓慢。我甚至有'允许的内存大小被耗尽'异常。有更快的解决方案吗? – Adrenaxus

+0

Arifs答案是正确的,因为你说你不能使用连接。上面的代码将包含一个嵌套select,它在mysql中非常慢(在Postgresql中速度要快得多)。最快的方法是使用连接,但你说你不能这样做? (为什么你不能使用连接?) – delatbabel