我的 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()
结合使用,但没有效果。
当您尝试将选项字段的值设置为空时会出现问题。我刚刚测试了一下,它渲染时没有值:
<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;
}),