php - 如何在输出前重组帖子

标签 php laravel sorting laravel-5 laravel-5.4

我有一篇文章申请。通常我没有任何推荐系统,除了从数据库中获取最新的 100 条数据并根据喜欢的数量推荐它们。我想知道如何将数据放入数组,而不是在输出之前做一些数学运算。我有一个想法,但在 Internet 上找不到任何有用的信息。

假设我有这个查询:

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

现在我想做的是创建另一个大小为 100array 并根据我的算法将每篇文章 id 一个接一个地放置。

在我开始之前,我想给你所有会用到的东西:

$article->likecount 
$article->viewcount 
$article->user->reputation  
$article->category->interest  

我将使用这些值来重新排序最后 100 篇文章,而不是对它们进行分页

这是我需要的:

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

然后将这个值放入数组中。数组需要按从最小到最大排序。

我可以在 CC++ 中做一些类似的事情,但我不知道足够的语法来在原始 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() 方法。

关于php - 如何在输出前重组帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670550/

相关文章:

javascript - 如何从 Ajax 后回调 Symfony 3 更新表

forms - 在 Laravel 4 中重定向回时保留表单值

php - Laravel - 播种关系

php - 按列对平面文件中的数据进行排序

php - 有没有办法在 php 文件上使用 purgecss?

php - 选择最近 30 天的所有订单,并计算每天有多少

php - Mysql类型隐藏类型转换

php - Laravel 迁移命名约定

java - 为什么我的比较方法有时会抛出 IllegalArgumentException?

arrays - 如何在 ruby​​ 中对文件名进行排序?