2015-12-28 51 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