Laravel 灯丝。带有选项和默认值

问题描述 投票:0回答:1

我有一段代码,我认为是可以改进的。

在 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());
    }
}

它有效,但是当然,关系的组合列表是空的,而不是填充了登录用户的值,并且是活动的。来吧,这不是很合适。

laravel laravel-livewire laravel-filament
1个回答
0
投票

尝试以这种方式添加默认值。

->default(auth()->user()->hasRole('super-admin')?null:auth()->user()->id)
© www.soinside.com 2019 - 2024. All rights reserved.