列关联
从关联中显示数据
你可以使用"点语法"访问关联中的字段。关联名在前,紧跟着点号,之后是要显示的字段名:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('author.name')
关联计数
你可以使用 counts()
方法,计算该列中关联记录的数量:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('users_count')->counts('users')
本例中,users
是要计数的关联名。列名必须是 users_count
,因为这是 Laravel 用来存储结果的命名规范
如果你想在计算之前设置关联查询范围,你可以传递一个数组到该方法中,其中键名是关联名,值是设置 Eloquent 查询范围的函数:
use Filament\Tables\Columns\TextColumn;
use Illuminate\Database\Eloquent\Builder;
TextColumn::make('users_count')->counts([
'users' => fn (Builder $query) => $query->where('is_active', true),
])
判断关联是否存在
使用 exists()
方法,你可以说明列中的关联记录是否存在:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('users_exists')->exists('users')
本例中,users
是要检查是否存在的关联名。列名必须是 users_exists
,因为这是 Laravel 用来存储结果的命名规范
如果你想在计算之前设置关联查询范围,你可以传递一个数组到该方法中,其中键名是关联名,值是设置 Eloquent 查询范围的函数:
use Filament\Tables\Columns\TextColumn;
use Illuminate\Database\Eloquent\Builder;
TextColumn::make('users_exists')->exists([
'users' => fn (Builder $query) => $query->where('is_active', true),
])
聚合关联
Filament 提供了几种用于聚合关联的字段,包括 avg()
、max()
、min()
和 min()
。比如,如果你想在列中显示所有关联记录中某个字段的平均值,你可以使用 avg()
方法:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('users_avg_age')->avg('users', 'age')
本例中,users
是关联名,age
是要平均的字段。列名必须是 users_avg_age
,因为这是 Laravel 用来存储结果的命名规范
如果你想在计算之前设置关联查询范围,你可以传递一个数组到该方法中,其中键名是关联名,值是设置 Eloquent 查询范围的函数:
use Filament\Tables\Columns\TextColumn;
use Illuminate\Database\Eloquent\Builder;
TextColumn::make('users_avg_age')->avg([
'users' => fn (Builder $query) => $query->where('is_active', true),
], 'age')