كما نلاحظ بداخل الدالة table أنها تأتي بشكل إفتراضي مع الدالة filters
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('created_at')->label('Payment time'),
Tables\Columns\TextColumn::make('product.name'),
Tables\Columns\TextColumn::make('user.name')->label('User name'),
Tables\Columns\TextColumn::make('user.email')->label('User email'),
Tables\Columns\TextColumn::make('voucher.code'),
Tables\Columns\TextColumn::make('subtotal')->money('usd'),
Tables\Columns\TextColumn::make('taxes')->money('usd'),
Tables\Columns\TextColumn::make('total')->money('usd'),
])
->filters([
//
])
->actions([
])
->bulkActions([
]);
}في هذا المثال سنقوم بعمل filter للبيانات حسب created_at اي ان يظهر لنا المدفوعات من تاريخ إلى تاريخ، لذلك نذهب للدالة filter ونقوم بإضافة الحقل created_at وكذلك تحديد محددات عملية الفرز وهي created_at, crated_until
->defaultSort('created_at','desc')
->filters([
Tables\Filters\Filter::make('created_at')
->form([
Forms\Components\DatePicker::make('created_from'),
Forms\Components\DatePicker::make('created_until'),
])
])الأن لو ذهبنا إلى admin panel سنرى ايقونه جديد للـ filter وعند الضغط عليها سيظهر لدينا الحقلين crated_at, created_until

الأن نحن بحاجه لإضافة query وكتابة الكود الخاص بعملية filter وذلك من خلال إضافة query
->filters([
Tables\Filters\Filter::make('created_at')
->form([
Forms\Components\DatePicker::make('created_from'),
Forms\Components\DatePicker::make('created_until'),
])
->query(function ($query, array $data) {
return $query
->when($data['created_from'],
fn($query) => $query->whereDate('created_at', '>=', $data['created_from']))
->when($data['created_until'],
fn($query) => $query->whereDate('created_at', '<=', $data['created_until']));
})
])وبذك يمكن لنا عمل filter

ليصبح لدينا الكود بشكل كامل كالتالي
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\PaymentResource\Pages;
use App\Filament\Resources\PaymentResource\RelationManagers;
use App\Models\Payment;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use PHPUnit\Util\Filter;
class PaymentResource extends Resource
{
protected static ?string $model = Payment::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
public static function form(Form $form): Form
{
return $form
->schema([
//
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('created_at')->label('Payment time')->sortable(),
Tables\Columns\TextColumn::make('product.name'),
Tables\Columns\TextColumn::make('user.name')->label('User name'),
Tables\Columns\TextColumn::make('user.email')->label('User email'),
Tables\Columns\TextColumn::make('voucher.code'),
Tables\Columns\TextColumn::make('subtotal')->money('usd'),
Tables\Columns\TextColumn::make('taxes')->money('usd'),
Tables\Columns\TextColumn::make('total')->money('usd'),
])
->defaultSort('created_at','desc')
->filters([
Tables\Filters\Filter::make('created_at')
->form([
Forms\Components\DatePicker::make('created_from'),
Forms\Components\DatePicker::make('created_until'),
])
->query(function ($query, array $data) {
return $query
->when($data['created_from'],
fn($query) => $query->whereDate('created_at', '>=', $data['created_from']))
->when($data['created_until'],
fn($query) => $query->whereDate('created_at', '<=', $data['created_until']));
})
])
->actions([
])
->bulkActions([
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListPayments::route('/'),
//'create' => Pages\CreatePayment::route('/create'),
//'edit' => Pages\EditPayment::route('/{record}/edit'),
];
}
public static function canCreate() : bool
{
return false;
}
public static function canDeleteAny() : bool
{
return false;
}
}