You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Filament v2关联管理器中如何获取当前编辑的用户模型

问题:Filament v2关联管理器中获取当前编辑的用户模型

我正在开发一个基于Filament v2的项目,拥有users、profiles、skills三张数据表,表结构如下:

usersprofilesskills
ididid
nameuser_idprofile_id
imagename

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:58:26