我目前正在使用分页功能为Android中的市场创建API,该分页仅加载前20-40个数据,并使用Laravel作为后端。 是否有任何查询选择随机数据,但数据仅加载一次? 例如在mysql中: 一种 乙 C d Ë F
使用inRandomOrder-> take(3)的第一个api调用: A,B,E
但在第二次通话中: C,D,F
编辑: 添加inRandomOrder函数
编辑更多说明: 我想随机获取20个数据项(有1000个数据)。 因为我使用的是无限滚动,所以我不想一次加载所有1000个数据(性能问题)..因此,当我想加载更多数据时,我需要再次调用API,但是如果您使用随机顺序,则有机会该数据将加载两次或更多。
即:有6个数据(A,B,C,D,E,F)以随机顺序(A,B,F)进行第一次调用,但在第二次调用中将加载C,D,E
抱歉,这是错误的询问方式..这是我第一次询问stackoverflow
答案 0 :(得分:0)
您必须将其保存在访问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 :(得分:0)
只需使用inRandomOrder()函数进行随机搜索。
PD:OP没有提供足够的信息,所以我将以User
模型为例。
定义端点:
/** api.php */
use App\Http\Controllers\UserController;
// ...
Route::get('/random-users', [UserController::class, 'getRandom']);
然后在您的控制器中:
/** UserController.php */
use App\User;
// ...
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