В моем приложении Laravel я использую DataTables Yajra для обработки нумерации моего набора данных.Таблица используется для отображения ряда продуктов, которые исключаются из других частей приложения.
Их можно исключить с помощью простых настроек, которые я могу включить в предложение where.Другой набор правил для исключения продуктов немного более продвинутый и имеет свою собственную функцию, которую я называю.Это все работает, но если, например, я хочу, чтобы на каждой странице было 10 товаров, на первой странице отображается только 7 товаров, потому что требуется 10 товаров, но исключены только 7 из них.
Есть ли способ включить мою функцию?в предложении where (которое я считаю крайне маловероятным) или каким-либо образом, чтобы убедиться, что мое приложение правильно использует нумерацию страниц и длину таблицы?
<?php
function filteringMethod(Request $request)
{
$type = $request->get('type');
$channel = $request->get('channel');
$sortData = $this->getSortingData();
$data = [];
$store = access()->getCurrentStore();
$website = $store->website;
$helper = new CommandHelper($store, $channel);
$products = Product::where([
['website_id', '=', $website->website_id],
['store_view_id', '=', $store->defaultStoreView()->store_view_id],
])
->limit($sortData['length'])
->offset($sortData['offset'])
->orderBy('store_data_product_id')
->get();
$fullCount = Product::where([
['website_id', '=', $website->website_id],
['store_view_id', '=', $store->defaultStoreView()->store_view_id],
])->count();
foreach ($products as $product) {
$reasons = [];
$includeReasons = [];
if ($helper->maybeExcludeVariant($product, $type, $reasons)) {
$productArray = $product->toArray();
sort($reasons);
if ($helper->maybeExcludeVariant($product, ProductFilters::TYPE_WHITELIST, $includeReasons)) {
sort($includeReasons);
$reasons[] = '';
$reasons = array_merge($reasons, $includeReasons);
}
$productArray['reason'] = implode("<br>", $reasons);
$data[] = $productArray;
}
}
if (!empty($data)) {
for ($i = 0; $i < count($data); $i++) {
$data[$i]['name_long'] =
$data[$i]['name_long'] . (!empty($data[$i]['name_variant']) && $data[$i]['name_variant'] !== 'Default' ?
' ' . $data[$i]['name_variant'] : '');
$data[$i]['price_excl'] =
Number::money($data[$i]['price_excl'], $store->defaultStoreView()->default_currency);
$data[$i]['cost_price_excl'] =
Number::money($data[$i]['cost_price_excl'], $store->defaultStoreView()->default_currency);
}
}
/**
* @var \Illuminate\Http\JsonResponse $returnData
*/
$returnData = Datatables::of($data)->rawColumns(['reason'])->make(true);
if (!empty($data)) {
$returnDataData = $returnData->getData();
$returnDataData->recordsFiltered = $fullCount;
$returnDataData->recordsTotal = $fullCount;
$returnData->setData($returnDataData);
}
return $returnData;
}
Выше приведен метод фильтрации, вызываемый объектом DataTable.
Любая помощь с этим будет оценена.