public function table(Table $table)
{
return $table
->query(Product::query()->where('active', true)->publicDisplay())
->modifyQueryUsing(fn () => $this->apiData)
->columns([
TextColumn::make('name'),
TextColumn::make('orders_count'),
])->defaultSort('orders_count', 'desc')
->filters([
Filter::make('filters')
->form(
[
DatePicker::make('start_at')->default(now()),
DatePicker::make('end_at')->default(now()),
]
)->columns(2)
->columnSpan(2)
], \Filament\Tables\Enums\FiltersLayout::AboveContent)
->actions([
// ...
])
->bulkActions([
// ...
]);
}
public function updated($name): void
{
if (Str::of($name)->contains('tableFilters.filters')) {
$startDate = data_get($this->tableFilters, 'filters.start_at');
$endDate = data_get($this->tableFilters, 'filters.end_at');
$this->apiData = $this->getData($startDate, $endDate);
}
}
private function getData($startDate, $endDate)
{
$cartItemsQuery = CartItem::where('order_id', '<>', 0)
->where('created_at', '>=', $startDate)
->where('created_at', '<=', $endDate)
->selectRaw('product_id as id, count(*) as orders_count')
->groupBy('product_id')
->orderBy('orders_count', 'desc');
return $cartItemsQuery;
}