我几乎要放弃了,因为我已经坚持了很长一段时间了。希望你能帮我个忙。
目标
我想在无限滚动中返回一个分页缓存的查询。我使用Ajax从视图中调用Controller,并获取"nextPageUrl()“并将其保存在我的视图中。
问题
我的查询返回内部数组的随机顺序(也在第一级排序),这是很好的。但是每次我进行ajax调用时,这个查询都会运行。所以我想:嘿,让我们缓存它,这样每次我进行ajax调用时都有相同的查询,而且我没有重复的查询。但是每次ajax请求都会出现副本。
我尝试了什么:
下面是我的查询,它被缓存并分页:
$counter = $request->page;
$results = Cache::remember($counter, 1, function () {
$seed = rand(1,9999);
return Ad::where('status', 1)
->whereIn('ad_type', [0, 1, 2, 3])
->where('expire_at', '>', date('Y-m-d H:i:s'))
->where('special_ad', 'standard_ad')
->orderByRaw(DB::raw("FIELD(ad_type,2,1,3,0)"))
->inRandomOrder()
->paginate(15);
});
if($request->ajax()) {
return [
'ads' => view('partials.advanced_search_sidebar2')->with(compact('results','index'))->render(),
'next_page' => $results->nextPageUrl(),
];
} else {
return view("welcome_live", compact('results', 'usertypes'));
}inRandomOrder();方法与orderByRaw("RAND()")方法等价。
不幸的是,我发现了以下不适合我的方法:Laravel随机分页缓存
我不想写太多,因为如果您需要对代码进行更彻底的解释,或者需要更多的代码片段或我的“解释的处理方法”,请告诉我,这里有一堵代码墙可能会让人感到困惑。提前感谢您的支持。你好,德索里。
编辑::我尝试使用$seed作为inRandomOrder($seed)中的一个参数,但是这会一次又一次地返回相同的查询,尽管种子是不同的。
有点接近解决方案,我尝试使用固定的$seed值,在我的例子中,我输入了25,所以种子总是25,不再重复,很好,但是顺序现在总是一样的。我基本上觉得我可以在随机排序和重复排序之间做出选择,也可以选择拥有相同的顺序,但没有重复。
我的Ajax函数
function renderBase() {
var page = $('.suchergebnisWrapper').data("base");
var counter = $('.suchergebnisWrapper').data("counter");
if (counter < 10) {
$.ajax({
url: page,
type: 'GET',
data: {
},
headers: {
'X-CSRF-Token': '{{ csrf_token() }}',
},
}).done(
function (responseData) {
$('.resultwrapper').append(responseData.ads);
$('.suchergebnisWrapper').data('base', responseData.next_page);
});
}
}这可能会让人感到困惑,因为在Controller中,我使用的是“计数器”和javascript,但这只是为了每次缓存中都有一个不同的“键”。
发布于 2019-06-18 12:19:30
distinct()可以给您提供不重复的数据,您应该像在其中传递id那样传递属性
return Ad::where('status', 1)
->whereIn('ad_type', [0, 1, 2, 3])
->where('expire_at', '>', date('Y-m-d H:i:s'))
->where('special_ad', 'standard_ad')
->orderByRaw(DB::raw("FIELD(ad_type,2,1,3,0)"))
->inRandomOrder()
->distinct()
->paginate(15);发布于 2019-06-18 11:47:24
在$计数器->追加(输入::除了(‘page’))之后尝试这样做;
https://stackoverflow.com/questions/56647920
复制相似问题