Filament Laravel

Create a resource using Filament in Laravel Application

  1. To create resource, create DB migration file by using this command

php artisan make:model <ResourceName> -m
  1. Edit DB migration file (database/migration/ResourceName.php)

$table->string('name');
$table->json('attachments');
$table->string('email');
$table->text('description');
$table->longText('long_description');
$table->integer('number');
$table->uuid('product_id');
$table->increments('id');
$table->decimal('amount', 10, 2);
$table->date('created_at');
$table->time('sunrise', 0);
$table->dateTime('created_at', 0);
$table->foreignId('user_id');
->nullable();
->autoIncrement();
->unique();
->index();
  1. Edit Model file (Model/ResourceName.php)

// Replace with column name
protected $fillable = [
    'subject',
    'description',
    'attachments',
    'originalAttachments',
    // ...
];

// This should have if you put multiple attachments
protected $casts = [
    'attachments' => 'array',
    'originalAttachments' => 'array',
];
  1. Run the database migration

php artisan migrate --force
  1. Create a filament resource menu

php artisan make:filament-resource <ResourceName>
  1. Create a form for the resource by edit Resources file (app/Filament/Resource)

 return $form
    ->schema([

        Section::make()
            ->schema([


        ])->columns(2)
                
    ]);
  1. To redirect back to table after user submit form, paste this code inside class (app\Filament\Resources\NameResource\Pages\CreateResource.php and EditResource.php)

protected function getRedirectUrl(): string
{
    return $this->getResource()::getUrl('index');
}  
  1. To create table resource, Edit Resources file (app/Filament/Resources)

return $table
                        
        ->groups([
        Group::make('status')
                ->titlePrefixedWithLabel(false),
        ])

        ->columns([
        
        Tables\Columns\TextColumn::make('created_at'),
        Tables\Columns\TextColumn::make('subject')->searchable(),
        Tables\Columns\BadgeColumn::make('category')->searchable(),
        Tables\Columns\TextColumn::make('amount')->searchable()->prefix('RM '),
        ])
        
        ->filters([
        //
        ])
        
        ->actions([
                Tables\Actions\ViewAction::make(),
                Tables\Actions\EditAction::make(),
                Tables\Actions\DeleteAction::make(),
        ])
        
        ->bulkActions([
                Tables\Actions\BulkActionGroup::make([
                Tables\Actions\DeleteBulkAction::make(),
        ]),

        
        ])->defaultSort('created_at', 'desc');

Last updated