Laravel Filament如何根据认证用户ID获取专属表格数据
Filament PHP 表格仅展示当前登录用户数据的实现方法
方法一:在表格定义中直接过滤查询
你可以通过modifyQueryUsing方法给表格的查询添加筛选条件,只返回当前登录用户的数据:
public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('user_id') ->searchable(), Tables\Columns\TextColumn::make('title') ->searchable(), Tables\Columns\TextColumn::make('slug') ->searchable(), Tables\Columns\TextColumn::make('status') ->searchable(), ]) // 添加筛选条件,仅展示当前用户的数据 ->modifyQueryUsing(fn ($query) => $query->where('user_id', auth()->id())) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]) ->emptyStateActions([ Tables\Actions\CreateAction::make(), ]); }
方法二:重写Resource的全局查询方法(更推荐)
如果希望整个Resource的所有数据操作(包括表格、详情页、编辑页)都自动过滤当前用户的数据,可以在你的Resource类中重写getEloquentQuery方法:
public static function getEloquentQuery(): Builder { return parent::getEloquentQuery()->where('user_id', auth()->id()); }
设置后,Filament会自动为该Resource下的所有查询加上用户ID筛选,无需在table方法中额外处理,安全性更高。
补充:创建记录时自动关联当前用户
为避免手动输入user_id,可在创建流程中自动赋值:
- 在CreateAction中隐藏字段并设置默认值:
->emptyStateActions([ Tables\Actions\CreateAction::make() ->form([ Forms\Components\TextInput::make('title')->required(), Forms\Components\TextInput::make('slug')->required(), // 隐藏user_id并自动赋值当前用户ID Forms\Components\Hidden::make('user_id')->default(fn () => auth()->id()), ]), ])
- 或者在模型中通过事件自动赋值(全局生效):
// 在对应模型类中 protected static function booted(): void { static::creating(function ($model) { $model->user_id = auth()->id(); }); }
内容的提问来源于stack exchange,提问作者khaled khan
相关产品推荐
相关产品推荐

