【问题标题】:laravel - orderby doesn't show correct resultslaravel - orderby 没有显示正确的结果
【发布时间】:2021-01-24 23:14:22
【问题描述】:

我有一个相当简单的查询,我加载并向对象添加一个元素,然后根据该自定义元素对其进行排序。我想获取 20 条记录或对其进行分页,但是当我这样做时,很多数据都消失了。

这是我的代码。下面的片段获得了所有的记录。

$fighters = Fighter::all();

以下代码获取函数中的点并将其添加到战斗机中,战斗机点最初不存在于集合中,它是在下面创建和填充的。

foreach ($fighters as $fighter) {
 $fighter->fighterPoints = $fighter->getFighterPoints($fighter->id);
}

然后我想用下面的函数按这些 fighterPoints 对所有内容进行排序。

$sorted = $fighters ->sortByDesc(function ($item, $key) {
  return $item->fighterPoints ;
});

当我这样做时,我得到了大约 9000 条左右的所有记录,然后它会正确地对 fighterPoints 进行排序: 第一条记录类似于 [FighterName, 21309]

当我执行$fighters = Fighter::paginate(20); 时,它只是以 [FighterName384, 200] 开头,应该是 [FighterName, 21309] 并且只有 20 个结果。 ::take(20) 方法也会发生同样的事情。

我在这里做错了什么?我是 laravel 8.

【问题讨论】:

  • 排序后的结果会不会在$sorted 中?所以当你分页时你需要使用它吗?
  • 不能在 $sorted 函数上使用->分页。

标签: php laravel eloquent


【解决方案1】:

你想对你的 $sorted 变量进行分页,对吧?! 要做到这一点,你必须

use Illuminate\Pagination\Paginator; // add
use Illuminate\Support\Collection; // add
use Illuminate\Pagination\LengthAwarePaginator; //add

...(your code)

// add
public function paginate($items, $perPage = 5, $page = null, $options = [])
{
    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
    $items = $items instanceof Collection ? $items : Collection::make($items);
    return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}

然后,以这种方式使用 $sorted:

$fighters = $this->paginate($sorted);

参考:https://www.itsolutionstuff.com/post/laravel-6-paginate-with-collection-or-arrayexample.html

————- 编辑————

对不起,我误解了你的问题! 如果你想订购 eloquent,这里是你的做法

$fighters = Fighter::orderBy('fighterPoints', 'desc')->paginate(20);

我希望这就是你想要的!

【讨论】:

  • 好吧,我想对大查询进行分页,这可行,但页面仍然太慢。
  • 这很清楚,但是模型上还不存在 fighterPoints,它被添加到该 foreach 的集合中。
  • 在您的 Fighter 模型中声明 getFighterPoints 方法。然后,当你循环它时,在你的视图中使用该方法!所以每20个战士可以获得战士积分!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多