>我有一个Laravel 4.2项目,我从SQL DB获取数据,我可以显示在页面上。我可以很好地选择单个记录,但我还想显示所选记录周围的记录。
例如,我想在所选记录的上方和下方显示 5 条记录。我不确定如何在拉拉维尔做到这一点。
$gradschoolrange = MOGRadschool::where('Title', '=', $gradschool)->get();
在上面的示例中,$gradschool可能是"Test College",它将返回带有值的该值,但我也想用这些值显示周围的所有其他相关记录。结果应如下所示:
- 美国广播公司学院
- 另一所学院
- 布拉赫学院
- 上大学
- 测试学院
- 又是一所学院 溜
- 溜球学院 学院
- 学院
- 某事学院
- 饮食学院
由于您的初始查询中没有指定排序,我假设您希望根据表中的主键(id
? - 如果没有,您显然需要更改它(中的 5 条下一个/上一个记录?
鉴于 ID 可能不是数字顺序的,我们不能简单地假设前 5 行将是标题 =$gradschool
减 5 的行的 ID,所以想知道这是否可行:
$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 条记录。如果需要,您还可以使用初始行来突出显示输出。
如果您希望它基于 ID,这是我从您的问题中了解到的,这样的事情应该可以工作:
$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);
现在,集合应该看起来与所需的结果相似。