كما نلاحظ بداخل الدالة 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; } }