У меня есть две модели, 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: обновление
Спасибо за ваш ответ. Он действительно работает, но ужасно медленный. Я даже получил исключение «разрешенного объема памяти». Есть ли более быстрое решение? – Adrenaxus
Ответ Arifs правильный, потому что вы сказали, что не можете использовать соединения. Приведенный выше код будет содержать вложенный выбор, который очень медленный в mysql (гораздо быстрее в Postgresql). Самый быстрый способ - использовать соединения, но вы сказали, что не можете этого сделать? (Почему вы не можете использовать соединения?) – delatbabel