Laravel 5.6 inRandomOrder and OrderBy

Как получить данные из базы данных вот так. Но случайно и никогда не дублировать.

$questions = Question::orderBy("created_at", 'desc')->skip(0)->take(3)->get();
$inquiries = Question::orderBy("created_at", 'desc')->skip(3)->take(3)->get();
$queries = Question::orderBy("created_at", 'desc')->skip(6)->take(3)->get();
$examinations = Question::orderBy("created_at", 'desc')->skip(9)->take(3)->get();
$inquisitions = Question::orderBy("created_at", 'desc')->skip(12)->take(3)->get();

Работает, но дублирует.

$questions = Question::inRandomOrder()->limit(10)->get();
$inquiries = Question::inRandomOrder()->limit(10)->get();
$queries = Question::inRandomOrder()->limit(10)->get();
$examinations = Question::inRandomOrder()->limit(10)->get();
$inquisitions = Question::inRandomOrder()->limit(10)->get();
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
7 596
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как насчет того, чтобы получить их все одним вызовом и отсортировать их с помощью PHP, используя метод коллекции сращивание:

$all = Question::inRandomOrder()->limit(50)->get();

$questions = $all->splice(0, 10);
$inquiries = $all->splice(0, 10);
$queries = $all->splice(0, 10);
$examinations = $all->splice(0, 10);
$inquisitions = $all->splice(0, 10);

Вы также можете просто сохранить идентификаторы, которые вы уже вытащили в массив, и игнорировать их при выполнении новых запросов с ->whereNotIn() следующим образом:

$except = []; // We'll save IDs of those pulled already here

$questions = Question::inRandomOrder()->limit(10)->get();
$except = array_merge($except, $questions->pluck('id')->toArray()); // Add IDs from upper call

// Add ->whereNotIn, to ignore IDs from $except
$inquiries = Question::inRandomOrder()->whereNotIn('id', $except)->limit(10)->get(); 
$except = array_merge($except, $inquiries->pluck('id')->toArray()); // Add IDs from upper call

$queries = Question::inRandomOrder()->whereNotIn('id', $except)->limit(10)->get();
$except = array_merge($except, $queries->pluck('id')->toArray()); // Add IDs from upper call

$examinations = Question::inRandomOrder()->whereNotIn('id', $except)->limit(10)->get();
$except = array_merge($except, $examinations->pluck('id')->toArray()); // Add IDs from upper call

$inquisitions = Question::inRandomOrder()->whereNotIn('id', $except)->limit(10)->get();

array_merge (): аргумент №2 не является массивом

user9538270 23.03.2018 05:13

Ах да, вы также должны вызвать в ->toArray() после ->pluck(). Но я настоятельно рекомендую первый метод, так как вы сделаете только 1 вызов SQL вместо 5. Отредактировал свой ответ, включив ->toArray().

DevK 23.03.2018 05:16

О Боже. Спасибо за вашу помощь и знания, сэр. Я это искал.

user9538270 23.03.2018 05:22

Другие вопросы по теме