Как реорганизовать посты перед выводом - PullRequest
0 голосов
/ 03 июня 2018

У меня есть приложение к статье.Обычно у меня нет никакой системы рекомендаций, кроме как получать последние 100 данных из базы данных и рекомендовать их в зависимости от количества подсчетов.Мне интересно, как я могу получить данные в массив и чем сделать некоторые математические вычисления перед выводом.У меня есть идея, но я не смог найти ничего полезного о том, как это сделать в Интернете.

Итак, допустим, у меня есть этот запрос:

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

Теперь я хочу сделать следующее:создайте еще один array размером 100 и разместите каждый идентификатор статьи по одному, но в зависимости от моего алгоритма.

, прежде чем я начну, я хочу дать вам все, что будет использоваться:

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

Я буду использовать эти значения в другом порядке, чтобы переупорядочить последние 100 статей, а затем paginate их.

Вот что мне нужно:

  • Мне нужно получить $article->likecount
  • Добавить $user->reputation
  • Добавить $category->interest
  • Result минус $article->viewcount

И затем положить это значение внутри массива.Массив нужно упорядочить от наименьшего к наибольшему .

Я могу сделать что-то похожее в C или C ++ , но я не знаю достаточно синтаксисачтобы сделать это в raw PHP или Laravel

1 Ответ

0 голосов
/ 04 июня 2018

Каждый результат 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();

Если вы хотите выполнить сортировку по деск, используйте метод sortByDesc().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...