我有一段代码,我认为是可以改进的。
在 form() 方法中的一个 DomainResource 中,我有一个循环关系。 (我认为唯一可行的方法,因为我不喜欢目前关于在 Filament 中有两个守卫的想法)
模型与用户创建了关系,但存在不符合条件的用户。
所以去掉
//->relationship('user','name')
选项
代码适用于我,但能够创建更多模型的登录用户可以在现场编写(即使它不起作用)
$user = auth()->user();
return $form
->Select::make('user_id')
//->relationship('user','name')
->label('Administrador')
->options(function () use ($user){
if ($user->getRoleNames()->first() === 'super-admin') {
return User::role('owner')->pluck('name', 'id');
}
return User::where('id', $user->id)->pluck('name', 'id');
})
->searchable()
有什么想法吗?
一段时间后,我重写了一点。
Select::make('user_id')
//->relationship('user','name')
->label('Administrador')
->options(function () {
if (auth()->user()->getRoleNames()->first() === 'super-admin')
{
return User::role('owner')->pluck('name', 'id');
}
return collect([
['name' => auth()->user()->name, 'id' => auth()->user()->id]
])->pluck('name', 'id');
})
->required()
->searchable()
此外,关于资源类
public static function getEloquentQuery(): Builder
{
if (auth()->user()->hasAnyRole(['super-admin'])) {
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
} else {
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
])
->whereBelongsTo(auth()->user());
}
}
它有效,但是当然,关系的组合列表是空的,而不是填充了登录用户的值,并且是活动的。来吧,这不是很合适。
尝试以这种方式添加默认值。
->default(auth()->user()->hasRole('super-admin')?null:auth()->user()->id)