Overview
简介
Column 类位于 Filament\Tables\Columns 命名空间中,并在 $table->columns() 方法内定义。Filament 内含多个内置列字段:
可编辑的列字段允许用户在不离开当前表格的情况下,更新数据库中的数据:
你也可以创建自定义列,以你希望的方式显示数据。
你可以使用静态 make() 方法并传入唯一名称来创建列。通常,列名对应于 Eloquent 模型中的属性名。你可以使用“点语法”来访问关联模型中的属性:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('title')
TextColumn::make('author.name')
字段内容 (state)
“列”(Column)初看起来可能有些“魔法”般的特性,但它们的设计初衷是简单易用,并针对显示 Eloquent 记录中的数据进行了优化。尽管如此,它们依然非常灵活,不仅限于显示 Eloquent 记录的属性,还可以展示来自任何来源的数据。
列所显示的数据被称为其“状态”(state)。在使用面板资源时,表格能够感知其正在显示的记录。这意味着列的状态是根据记录中相应属性的值来设定的。例如,如果该列用于 PostResource 的表格中,它就会显示当前文章的 title 属性值。
use Filament\Tables\Columns\TextColumn;
TextColumn::make('title')
如果你想访问存储在关联中的值,你可以使用“点语法”。首先是你要访问数据的关联名,随后紧跟着点号,然后是属性名:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('author.name')
你也可以使用“点语法”访问 Eloquent 模型中的 JSON/数组字段的值。首先是属性名,紧随着点号,最后是你想要读取的 JSON 对象的键名:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('meta.title')
设置列的状态值
使用 state() 方法,你可以传递自定义状态到列中:
use Filament\Tables\Columns\TextColumn;
TextColumn::make('title')
->state('Hello, world!')
state() 方法也可以接受函数作为参数来动态计算其值。你可以将多个 utility 作为参数注入到函数中。
Learn more about utility injection.| Utility | Type | Parameter | Description |
|---|---|---|---|
| Column | Filament\Tables\Columns\Column | $column | The current column instance. |
| Livewire | Livewire\Component | $livewire | The Livewire component instance. |
| Eloquent record | ?Illuminate\Database\Eloquent\Model | $record | The Eloquent record for the current table row. |
| Row loop | stdClass | $rowLoop | The <a href="https://laravel.com/docs/blade#the-loop-variable" target="_blank">row loop</a> object for the current table row. |
| State | mixed | $state | The current value of the column, based on the current table row. |
| Table | Filament\Tables\Table | $table | The current table instance. |