Laravel получить строку с записями выше и ниже - PullRequest
0 голосов
/ 02 октября 2018

У меня есть проект Laravel 4.2, где я получаю данные из базы данных SQL и могу отображать их на странице.Я могу просто выбрать одну запись, но я также хочу показать записи вокруг выбранной.

Например, я хочу показать 5 записей выше и ниже выбранной.Я не уверен, как это сделать в Ларавеле.

$gradschoolrange = MOGRadschool::where('Title', '=', $gradschool)->get();

В приведенном выше примере $ gradschool может быть «Test College», он вернет его со значением, но я хочу показать все остальные связанные записи с этими значениями.Результаты должны выглядеть примерно так:

  1. ABC College
  2. Другой колледж
  3. Blah College
  4. Перейти в колледж
  5. Тестовый колледж
  6. Еще один колледж
  7. Колледж Йо Йо
  8. Колледж колледжа
  9. Колледж Something
  10. Колледж питания

Ответы [ 2 ]

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

Если вы хотите, чтобы оно основывалось на идентификаторах, что, как я понимаю из вашей проблемы, должно сработать примерно так:

$selectedGradSchool = MOGRadschool::where('Title', '=', $gradschool)->get()->first();
$aboveSelected = MOGRadschool::where('id', '<=', $selectedGradSchool->id)
                 ->orderBy('id', 'desc')
                 ->take('5')
                 ->get();
$belowSelected = MOGRadschool::where('id', '>' $selectedgradSchool->id)
                 ->take('5')
                 ->get();
//Concatenate both results
$schoolRange = $aboveSelected->concat($belowSelected);

Теперь коллекция должна выглядеть примерно так, как вам нужно.

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

Поскольку в вашем начальном запросе не указан порядок, я предполагаю, что вы хотите 5 следующих / предыдущих записей в соответствии с первичным ключом (id? - если нет, вам, очевидно, нужно изменить это) в таблице?

Учитывая, что идентификаторы не могут быть численно последовательными, мы не можем просто предположить, что предыдущие 5 строк будут идентификатором строки с заголовком = $gradschool минус 5, поэтому задаемся вопросом, может ли это сработать:

    $initial = MOGRadschool::where('Title', $gradschool)->first(); // get the initial row with the title of $gradschool
    $result = MOGRadschool::where('id', '<', $initial->id)->take(5)->orderBy('id', 'DESC') // new query getting the previous 5 rows, by ID
        ->union(MOGRadschool::where('id', '>', $initial->id)->take(5)) // union a second query getting the next 5 rows by ID
        ->get() // get the result as a collection
        ->add($initial) // add the initial row to the collection
        ->sort(); // sort the collection (by id) so that the initial row is in the middle

Таким образом, на выходе получается коллекция, содержащая начальную строку посередине, до 5 записей с каждой стороны.У вас также есть начальная строка, чтобы выделить вывод, если вам это нужно.

...