跳到主要内容
版本:3.x

列关联

从关联中显示数据

你可以使用"点语法"访问关联中的字段。关联名在前,紧跟着点号,之后是要显示的字段名:

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')