如何在输出之前重新组织帖子

时间:2018-06-03 20:10:55

标签: php laravel sorting laravel-5 laravel-5.4

我有一篇文章申请。通常我没有任何推荐系统,除了从数据库获取最新的100个数据,而不是根据类似的数量推荐它们。我想知道如何将数据输入数组,而不是在输出之前做一些数学运算。我有一个想法,但无法找到有关如何在互联网上做到这一点的任何有用的东西。

让我说我有这个问题:

$articles = Article::orderBy('id', 'desc')->take(100)->get();

现在我要做的是创建另一个{<1}},其大小为 100 ,并逐个放置每篇文章ID,但这取决于我的算法。

在我开始之前,我想给你一切将要使用的东西:

array

我将使用这些值来重新排序最后100篇文章,而不是$article->likecount $article->viewcount $article->user->reputation $article->category->interest

这就是我需要的:

  • 我需要paginate
  • 添加$article->likecount
  • 添加$user->reputation
  • $category->interest减去Result

然后把这个值放在数组中。数组需要最小到最大

我可以在 C C ++ 中做类似的事情,但我不知道在原始 PHP 中完成此操作的语法Laravel

1 个答案:

答案 0 :(得分:1)

每个Eloquent结果都是一个包含大量有用方法的Collection。在这种情况下,您可以将sortBy与回调函数一起使用:

$articles = Article::orderBy('id', 'desc')
                     ->with(['user', 'category']) // add with to optimize your query relations
                     ->take(100)->get();


$sorted = $articles->sortBy(function($article) {
    return $article->likecount + $article->user->reputation + $article->category->interest - $article->viewcount;
});

// and here is sorted array with 100 articles.
$articles_sorted = $sorted->values()->all();

如果您想按desc排序,请使用sortByDesc()方法。