Laravel Nova - 预选空选项

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

我的 Nova 操作之一中有一个字段可以同时具有 null 和 int 值:

public function fields(NovaRequest $request): array
{
    /** @var Account $account */
    $account = $request->findModelQuery()->first();

    return [
        Select::make('Usage limit')
            ->options([
                10 => '10',
                100 => '100',
                500 => '500',
                1000 => '1000',
                2500 => '2500',
                5000 => '5000',
                8000 => '8000',
                null => 'Unlimited',
            ])->default(function ($request) use ($account) {
                return $account->getFeatureLimit($this->featureName);
            }),
    ];
}

$account->getFeatureLimit($this->featureName)
返回预先存在的值,可以是
?int

返回数字时会预先选择

值,但是,当预先存在的值为

null
时,不会选择
Unlimited

Laravel Nova 有什么方法可以预选 null => Unlimited 吗? 尝试了

withMeta
方法与
nullable()
结合使用,但没有效果。

php laravel laravel-nova
1个回答
0
投票

当您尝试将选项字段的值设置为空时会出现问题。我刚刚测试了一下,它渲染时没有值:

<option value>Unlimited</option>

我会将 unlimited 的键更改为另一个非空值,然后检查

getFeatureLimit
是否返回 null。如果确实返回
Unlimited
的新密钥。使用
fillUsing
方法,您可以指定如何水合模型属性,如下所示:

Select::make('Usage limit')
            ->options([
                10 => '10',
                100 => '100',
                500 => '500',
                1000 => '1000',
                2500 => '2500',
                5000 => '5000',
                8000 => '8000',
                'unlimited' => 'Unlimited',
            ])->default(function ($request) {
                $default = null;

                if (! is_null($default)) {
                    return $default;
                }

                return 'unlimited';
            })->fillUsing(function (NovaRequest $request, $model, $attribute, $requestAttribute) {
                $value = $request->usage_limit;

                if ($value === 'unlimited') {
                    $value = null;
                }

                $model->usage_limit = $value;
            }),
© www.soinside.com 2019 - 2024. All rights reserved.