Как получить случайный ряд из последних 5 строк? - PullRequest
2 голосов
/ 28 октября 2019

РЕДАКТИРОВАНИЕ : Из пяти самых старых постов я хочу получить один ряд из случайных.


Как я могу получить случайную строку из самой старой 5 строки?

Я попробовал это ниже:

Post::oldest(5)->random()->first();

Но верните мне ошибку:

Вызов неопределенного метода Illumi nate \ Database \ Eloquent \ Builder :: random()

Кто-то знает, как это сделать простым и понятным способом?

Ответы [ 2 ]

4 голосов
/ 28 октября 2019

Класс Builder не имеет метода random(), а класс Collection. Кроме того, oldest() не принимает целое число в качестве аргумента, он ищет column для использования (использует created_at по умолчанию).

Используйте вместо этого следующий запрос:

$posts = Post::inRandomOrder()->limit(5)->get();

Примечание: не используйте ->first(), если вы хотите несколько строк;->first() возвращает первую строку из базы данных, ->get() возвращает строки в Collection.

Правка: неверное прочтение вопроса. См. Запрос ниже:

$randomPost = Post::oldest()->limit(5)->get()->random();

Используйте начальные Post::oldest()->limit(5)->get(), чтобы получить 5 Posts, упорядоченный по created_at, затем используйте логику Collection, чтобы возвратить одну запись через random().

1 голос
/ 28 октября 2019

Как сказал @Tim Lewis, не используйте first, но вместо этого вы можете написать take + количество элементов, которые вы хотите отобразить

return Post::inRandomOrder()->limit(5)->get()->take(1);
//or
return Post::oldest()->take(5)->get()->random();

Метод take возвращаетновая коллекция с указанным количеством предметов: в этом случае мы взяли только один предмет, более подробную информацию можно найти в документах Надеюсь, это поможет

...