如何在输出前重组帖子
How to reorganize posts before outputting
我有一篇文章申请。通常我没有任何推荐系统,除了从数据库中获取最新的 100 条数据并根据喜欢的数量推荐它们。我想知道如何将数据放入数组,而不是在输出之前做一些数学运算。我有一个想法,但在互联网上找不到任何有用的方法。
假设我有这个查询:
$articles = Article::orderBy('id', 'desc')->take(100)->get();
现在我想做的是创建另一个 array
,大小为 100,并根据我的算法将每篇文章 id 一个接一个地放置。
在我开始之前,我想给你所有会用到的东西:
$article->likecount
$article->viewcount
$article->user->reputation
$article->category->interest
我将使用这些值来重新排序最后 100 篇文章,而不是 paginate
它们。
这是我需要的:
- 我需要得到
$article->likecount
- 添加
$user->reputation
- 添加
$category->interest
Result
减$article->viewcount
然后将此值放入数组中。数组需要排序从最小到最大。
我可以在 C 或 C++ 中做一些类似的事情,但我不知道足够的语法来在原始 PHP或Laravel
每个 Eloquent 结果都是一个包含大量有用方法的集合。在这种情况下,您可以将 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()
方法。
我有一篇文章申请。通常我没有任何推荐系统,除了从数据库中获取最新的 100 条数据并根据喜欢的数量推荐它们。我想知道如何将数据放入数组,而不是在输出之前做一些数学运算。我有一个想法,但在互联网上找不到任何有用的方法。
假设我有这个查询:
$articles = Article::orderBy('id', 'desc')->take(100)->get();
现在我想做的是创建另一个 array
,大小为 100,并根据我的算法将每篇文章 id 一个接一个地放置。
在我开始之前,我想给你所有会用到的东西:
$article->likecount
$article->viewcount
$article->user->reputation
$article->category->interest
我将使用这些值来重新排序最后 100 篇文章,而不是 paginate
它们。
这是我需要的:
- 我需要得到
$article->likecount
- 添加
$user->reputation
- 添加
$category->interest
Result
减$article->viewcount
然后将此值放入数组中。数组需要排序从最小到最大。
我可以在 C 或 C++ 中做一些类似的事情,但我不知道足够的语法来在原始 PHP或Laravel
每个 Eloquent 结果都是一个包含大量有用方法的集合。在这种情况下,您可以将 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()
方法。