#android #mysql #laravel #api
#Android #mysql #laravel #API
Вопрос:
В настоящее время я создаю API для marketplace на Android, используя разбивку на страницы, которая загружает только первые 20-40 данных и использует Laravel в качестве серверной части. Есть ли какой-либо запрос, который выбирает случайные данные, но данные загружаются только один раз? например, в mysql: A B C D E F
первый вызов api с использованием inRandomOrder-> take(3): A, B, E
но во втором вызове: C, D, F
Редактировать: Добавить функцию inRandomOrder
Редактировать дополнительное объяснение: я хочу получить случайные 20 элементов данных (всего 1000 данных).. поскольку я использую like infinite scroll, я не хочу загружать все 1000 данных сразу (проблемы с производительностью).. поэтому, когда я хочу загрузить больше данных, мне нужно снова вызвать API, но если вы используете случайный порядок, есть вероятность, что данные загрузятся дважды или больше..
то есть: есть 6 данных (A, B, C, D, E, F), которые сначала вызываются в случайном порядке (A, B, F), но при втором вызове будут загружены C, D, E
извините, если это неправильный способ задать вопрос .. я впервые задаю вопрос в stackoverflow
Ответ №1:
Вам пришлось бы где-то сохранять их, сколько раз к вашему api обращались.
Я бы сделал это, отправив счетчик с вашим вызовом api вместо этого
Очень простой метод:
РЕДАКТИРОВАТЬ: добавлено принимать
Маршрут:
Route::get('getdata/{counter}/{take}', ['uses' => 'APIController@getdata']);
Контроллер:
public function getdata($counter, $take) {
Model::skip($counter)->orderByRaw("RAND()")->take($take)->get();
}
РЕДАКТИРОВАТЬ: добавлен orderByRaw
Итак, в вашем вызове api добавьте url.com/howmanytoskip/howmanytotake/
В вызове api: вы должны увеличить пропуск, количество загруженных и уменьшить количество использований, чтобы вы получали меньше элементов при загрузке.
Комментарии:
1. извините, я забыл добавить функцию inRandomOrder, есть ли какой-либо способ добиться этого, используя случайный порядок?
2. Я попробовал это, используя ваш метод, но он по-прежнему возвращает те же данные.. Мой первый вызов (по идентификатору): 9,10,15,7,6 Мой второй вызов: 9,13,12,15,10
Ответ №2:
Просто выполните случайный поиск, используя функцию inRandomOrder().
PD: OP не предоставил достаточно информации, поэтому я собираюсь использовать User
модель в качестве примера.
Определите свою конечную точку:
/** api.php */
use AppHttpControllersUserController;
// ...
Route::get('/random-users', [UserController::class, 'getRandom']);
Затем в вашем контроллере:
/** UserController.php */
use AppUser;
// ...
public function getRandom()
{
$users = User::inRandomOrder() // <--- randomizing
->take(3) // <--- limiting response to 3 items
->get(); // <--- getting the results
return response()->json(['users' => $users], 200);
}
Итак, теперь просто сделайте GET
вызов ранее определенной конечной точки, и вы получите свои случайные данные:
GET http://www.my-website.com/api/random-users