概述
简介
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 记录中的属性。
列字段展示的数据称为“状态”。当使用面板资源时,表格知悉它要展示的记录。也就是说,列的状态是基于记录的属性值设置的。比如,如果列用在 PostResource
的表格中,那么当前贴文(post)的 title
属性值将会被显示。
use Filament\Tables\Components\TextColumn;
TextColumn::make('title')
如果你想访问存储在关联中的值,你可以使用“点语法”。首先是你要访问数据的关联名,随后紧跟着点号,然后是属性名:
use Filament\Tables\Components\TextColumn;
TextColumn::make('author.name')
你也可以使用“点语法”访问 Eloquent 模型中的 JSON/数组字段的值。首先是属性名,紧随着点号,最后是你想要读取的 JSON 对象的键名:
use Filament\Tables\Components\TextColumn;
TextColumn::make('meta.title')
设置列的状态值
使用 state()
方法,你可以传递自定义状态到列中:
use Filament\Tables\Components\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. |
设置列的默认状态
当列为空(其状态为 null
)时,你可以使用 default()
方法定义要使用的替代状态。此方法将默认状态视为真实状态,因此图片或颜色等列将显示默认图像或颜色。
use Filament\Tables\Components\TextColumn;
TextColumn::make('title')
->default('Untitled')
当列为空时添加占位符文本
有时,你可能希望为状态为空的列显示占位符文本,该列的样式为浅灰色文本。这与默认值不同,因为占位符始终是文本,而不会被视为真实状态。
use Filament\Tables\Components\TextColumn;
TextColumn::make('title')
->placeholder('Untitled')
