1. Go to this page and download the library: Download filamentphp/advanced-export library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
filamentphp / advanced-export example snippets
namespace App\Models;
use Filament\AdvancedExport\Contracts\Exportable;
use Filament\AdvancedExport\Traits\InteractsWithExportable;
use Illuminate\Database\Eloquent\Model;
class Cliente extends Model implements Exportable
{
use InteractsWithExportable;
public static function getExportColumns(): array
{
return [
'id' => 'ID',
'nome' => 'Name',
'email' => 'Email',
'telefone' => 'Phone',
'status' => 'Status',
'created_at' => 'Created At',
];
}
public static function getDefaultExportColumns(): array
{
return [
['field' => 'id', 'title' => 'ID'],
['field' => 'nome', 'title' => 'Full Name'],
['field' => 'email', 'title' => 'Email Address'],
['field' => 'status', 'title' => 'Status'],
];
}
}
namespace App\Filament\Resources\Cliente\Pages;
use App\Filament\Resources\ClienteResource;
use Filament\AdvancedExport\Traits\HasAdvancedExport;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListClientes extends ListRecords
{
use HasAdvancedExport;
protected static string $resource = ClienteResource::class;
protected function getHeaderActions(): array
{
return [
$this->getAdvancedExportHeaderAction(),
CreateAction::make(),
];
}
}
class ListClientes extends ListRecords
{
use HasAdvancedExport;
protected function applyCustomFilter($query, string $filterName, mixed $filterValue): void
{
match ($filterName) {
'has_orders' => $query->whereHas('orders'),
'premium_customer' => $query->where('total_spent', '>', 10000),
default => $this->applyGenericFilter($query, $filterName, $filterValue),
};
}
}
// config/advanced-export.php
'file' => [
'extension' => 'xlsx', // Default format
'supported_formats' => ['xlsx', 'csv'], // Available in modal
],
// config/advanced-export.php
'fallback_filters' => [
'created_at',
'updated_at',
// Add your resource-specific filters here
],
class ListClientes extends ListRecords
{
use HasAdvancedExport;
protected function getFallbackFilterNames(): array
{
return ['created_at', 'updated_at', 'status', 'cliente_id'];
}
}
public static function getExportColumns(): array
{
return [
'id' => 'ID',
'declaration_number' => 'Declaration Number',
'insurer' => 'Insurer', // Will automatically load the relationship
'status' => 'Status',
];
}
public static function getExportColumns(): array
{
return [
'id' => 'ID',
'insurer.name' => 'Insurer Name', // Specific attribute
'insurer.nuit' => 'Insurer NUIT', // Another attribute
'status' => 'Status',
];
}
class ListDeclarations extends ListRecords
{
use HasAdvancedExport;
protected function getExportRelationshipsForModel(): array
{
return ['insurer', 'payments', 'createdBy'];
}
}
class ListClientes extends ListRecords
{
use HasAdvancedExport;
protected function applyCustomOrdering($query, string $orderColumn, string $orderDirection): void
{
// Direction is already validated ('asc' or 'desc') at this point
if ($orderColumn === 'insurer.name') {
$query->join('insurers', 'declarations.insurer_id', '=', 'insurers.id')
->orderBy('insurers.name', $orderDirection);
return;
}
// Call parent for standard column validation and ordering
parent::applyCustomOrdering($query, $orderColumn, $orderDirection);
}
}