Filament v2关联管理器中如何获取当前编辑的用户模型
问题:Filament v2关联管理器中获取当前编辑的用户模型
我正在开发一个基于Filament v2的项目,拥有users、profiles、skills三张数据表,表结构如下:
| users | profiles | skills |
|---|---|---|
| id | id | id |
| name | user_id | profile_id |
| image | name |
在App\Models\User中定义了如下关联:
public function profile(): HasOne { return $this->hasOne(Profile::class, 'user_id'); } public function skills(): HasManyThrough { return $this->hasManyThrough(Skill::class, Profile::class); }
我创建了App\Filament\Resources\UserResource\RelationManagers\SkillRelationManager类,其静态form方法如下:
public static function form(Form $form): Form { return $form ->schema([ Forms\Components\Hidden::make('profile_id') ->default(fn(User $user) => $user->profile->id), Forms\Components\TextInput::make('name') ->required(), ]); }
我想为profile_id设置当前编辑用户的profile ID作为默认值,但上述回调生成的是新的User实例而非当前编辑的用户数据,请问如何获取当前正在编辑的用户模型?
解决方案
在Filament v2的关联管理器(RelationManager)中,要获取当前关联的父模型(也就是正在编辑的User实例),可以使用RelationManager内置的getOwnerRecord()方法,它会直接返回当前操作的父记录。
修改profile_id字段的默认值回调即可:
public static function form(Form $form): Form { return $form ->schema([ Forms\Components\Hidden::make('profile_id') // 通过$this->getOwnerRecord()获取当前编辑的用户模型 ->default(fn () => $this->getOwnerRecord()->profile->id), Forms\Components\TextInput::make('name') ->required(), ]); }
说明
之前的写法中,闭包参数User $user是Filament自动注入的全新User实例,并非当前正在编辑的用户数据。而getOwnerRecord()方法是RelationManager的核心方法之一,专门用于获取当前关联的父级模型,能准确拿到你需要的用户实例。
内容的提问来源于stack exchange,提问作者royhara
相关产品推荐
相关产品推荐

