Упорядочить по массиву по ключу в laravel - PullRequest
0 голосов
/ 22 октября 2018

Я использую приведенный ниже запрос, чтобы получить соответствующий идентификатор из следующих таблиц, где я получу только student_id.

С этим student_id мне нужно найти соответствующую строку из studentsтаблицу, а затем я хочу orderBy() ключи (например, имя) из students таблицы.

Я устанавливаю отношения между student_mapping и student модель.

$mapps = Student_mapping::select('student_id');

if($request->session_id) {
    $mapps = $mapps->where('session', '=', $request->session_id);
}
if($request->class_id) {
    $mapps = $mapps->where('class_id', '=', $request->class_id);

    if($request->group_id) {
        $mapps = $mapps->where('group_id', '=', $request->group_id);

        if($request->section_id) {
            $mapps = $mapps->where('section_id', '=', $request->section_id);
        }
    }
}

$mapps = $mapps->get();

$students = [];

foreach($mapps as $map) {
    if($map->student)
    {
        $students[] = Student::find($map->student_id);
    }
}

Я должен сделать $ Students-> orderBy ('name', 'ASC'), но я не могу этого сделать.

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Было бы быстрее и лучше получить запрос, подобный следующему:

$students = Student::whereIn('id', $mapps)->orderBy('id')->get();

Это даст вам Collection всех студентов, которые должны быть упорядочены по ID.Если вы хотите использовать его как массив, не забывайте вызывать метод ->toArray() для коллекции, но в любом случае он должен служить своей цели как коллекция.

0 голосов
/ 22 октября 2018
$students = [];

foreach($mapps as $map) {
    if($map->student)
    {
        $students[] = Student::find($map->student_id);
    }
}

по классу коллекции Laravel см.

return   collect($student)->sortBy('name')->values()->all();
0 голосов
/ 22 октября 2018

Вы можете использовать User::where('id', $map->student_id)->orderBy('name', 'ASC');это не выглядит полезным, так как id является уникальным в любом случае.

В отдельном примечании, похоже, что ваш код будет страдать от нескольких обращений к БД.

Вы могли бы упростить свой запросбыть:

$student_ids = $mapps->pluck('student_id');
$students = Student::whereIn('id', $student_ids)->orderBy('name', 'ASC')->get();

PS: Eloquent (модель) оборачивается вокруг QueryBuilder.См. пример заказа или групповой работы в документации

...