2015-12-28 3 views
1

У меня есть две модели, students и languages. Каждый студент может говорить n языки с определенным умение через сводную таблицу 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'); 
    }  
} 

Как я могу получить список студентов, которые говорят на языке, и сортировать их по их уровню мастерства? В Fluent было бы что-то вроде этого, но я не могу использовать присоединяется и нужно записать его в красноречив:

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

Спасибо за любые входы.

Edit: обновление

ответ

1

Я не проверить это, но вы можете попробовать это

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

Спасибо за ваш ответ. Он действительно работает, но ужасно медленный. Я даже получил исключение «разрешенного объема памяти». Есть ли более быстрое решение? – Adrenaxus

+0

Ответ Arifs правильный, потому что вы сказали, что не можете использовать соединения. Приведенный выше код будет содержать вложенный выбор, который очень медленный в mysql (гораздо быстрее в Postgresql). Самый быстрый способ - использовать соединения, но вы сказали, что не можете этого сделать? (Почему вы не можете использовать соединения?) – delatbabel

Смежные вопросы