AddressesRelationManager.php
TLDR
This file is a PHP class AddressesRelationManager
located in the App\Filament\Resources\Shop\BrandResource\RelationManagers
namespace. It extends the RelationManager
class and provides methods to define the form and table configuration for managing addresses related to a brand in a Filament resource.
Methods
form
This method takes a Form
object as an argument and returns a modified version of the form. It defines the form schema with several input fields (street, zip, city, state, and country) using Filament form components.
table
This method takes a Table
object as an argument and returns a modified version of the table. It defines the table columns to display address details (street, zip, city, and country) using Filament table columns. It also defines header actions and row actions for attaching, creating, editing, detaching, and deleting address records.
<?php
namespace App\Filament\Resources\Shop\BrandResource\RelationManagers;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables;
use Filament\Tables\Table;
use Squire\Models\Country;
class AddressesRelationManager extends RelationManager
{
protected static string $relationship = 'addresses';
protected static ?string $recordTitleAttribute = 'full_address';
public function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('street'),
Forms\Components\TextInput::make('zip'),
Forms\Components\TextInput::make('city'),
Forms\Components\TextInput::make('state'),
Forms\Components\Select::make('country')
->searchable()
->getSearchResultsUsing(fn (string $query) => Country::where('name', 'like', "%{$query}%")->pluck('name', 'id'))
->getOptionLabelUsing(fn ($value): ?string => Country::find($value)?->getAttribute('name')),
]);
}
public function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('street'),
Tables\Columns\TextColumn::make('zip'),
Tables\Columns\TextColumn::make('city'),
Tables\Columns\TextColumn::make('country')
->formatStateUsing(fn ($state): ?string => Country::find($state)?->name ?? null),
])
->filters([
//
])
->headerActions([
Tables\Actions\AttachAction::make(),
Tables\Actions\CreateAction::make(),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DetachAction::make(),
Tables\Actions\DeleteAction::make(),
])
->groupedBulkActions([
Tables\Actions\DetachBulkAction::make(),
Tables\Actions\DeleteBulkAction::make(),
]);
}
}