我有一段我认为可以改进的代码。
在form()方法中的DomainResource中,我有一个循环关系。(这是我认为唯一可行的方法,因为我不喜欢目前在灯丝中有两个守卫的想法)
模型与User建立了关系,但是有不符合条件的用户。
删除//->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)