Я так близок к тому, чтобы сдаться, потому что я застрял в этом довольно долго.
Я надеюсь, что вы можете помочь мне.
Цель
Я хочу вернуть , разбитый на страницы и кэшированный, запрос в бесконечной прокрутке.
Я использую Ajax, чтобы совершать вызовы из View в 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
Я не хочу писать слишком много, потому что это может ввести в заблуждение наличие здесь стены кода, если вам нужно более подробное объяснение кода или еще несколько фрагментов кода или мой "способ обработки объясненных вещей", пожалуйста, дайте мне я знаю.
Спасибо заранее за вашу поддержку.
С уважением, Десори.
Edit :: Я пытался использовать $ seed в качестве аргумента в inRandomOrder ($ seed), но это возвращало один и тот же запрос снова и снова, хотя 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);
});
}
}
Это может показаться странным, потому что в контроллере я использую "counter" и в javascript, но это просто для того, чтобы каждый раз иметь разные "ключи" в моем кэше.