Filament v3, example table custom filter with form and query relation

using eloquent whereHas

$getCustomerNameFromQuotation = Quotation::whereHas('customer', function($query){
    $query->where('customers.name', 'LIKE', '%ali%');
})->get();
    public static function table(Table $table): Table
    {
        return $table
            ->columns([])
            ->filters([
                Filter::make('numbering_f')
                    ->form([
                        TextInput::make('numbering')
                        ->label('No' )
                        ->prefix('#Q'),
                    ])
                    ->query(function (Builder $query, array $data): Builder {
                        return $query
                            ->when(
                                $data['numbering'],
                                fn (Builder $query, $data): Builder => $query->where('numbering', 'LIKE', '%' . $data . '%'),
                            );
                    })
                    ->indicateUsing(function (array $data): ?string {
                        if (! $data['numbering']) {
                            return null;
                        }
                 
                        return 'No %'.$data['numbering'] . '%';
                    }),
                Filter::make('customer_name_f')
                    ->form([
                        TextInput::make('customer_name')
                        ->label('Customer Name' ),
                    ])
                    ->query(function (Builder $query, array $data): Builder {
                        return $query
                            ->when(
                                $data['customer_name'],
                                fn (Builder $query, $data): Builder =>  $query->whereHas('customer', function (Builder $query) use ($data) {
                                    $query->where('customers.name', 'LIKE', '%' . $data . '%');
                                }),
                            );
                    })
                    ->indicateUsing(function (array $data): ?string {
                        if (! $data['customer_name']) {
                            return null;
                        }
                 
                        return 'Customer Name %'.$data['customer_name'] . '%';
                    }),
            ], layout: FiltersLayout::AboveContentCollapsible)
            ->actions([])
            ->bulkActions([]);
    }

Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *