3

我正在使用 Laravel Nova 开发一个 Web 应用程序。Laravel Nova 是相当新的。我现在遇到数据库关系和字段的问题。我喜欢忽略数据库操作中的一个字段。这是我的场景。

在 Job 资源中,我有这个 fields 方法

public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
            Text::make('Name', 'name'),
            Text::make('Email', 'email'),
            Select::make('Contract Types')->options($array_of_options)//I want to ignore this field
        ];
    }

如您所见,最后一个字段是合同类型。

当我从仪表板创建新作业时,它会抛出错误,因为作业模型上没有 contract_types 列。我喜欢从数据库操作中忽略该字段。我怎么才能得到它?

4

3 回答 3

6

接受的答案并不完全正确。它可以防止将值存储在数据库中,但也完全隐藏了表单中的字段。在某些奇怪的情况下,您可能希望显示未存储的字段。

我的建议是将以下内容添加到资源中(或者如果您希望在多个资源中使用它,则将其放在更可重用的地方):

public static function fill(NovaRequest $request, $model)
{
    return static::fillFields(
        $request, $model,
        (new static($model))->creationFieldsWithoutReadonly($request)->reject(function ($field) use ($request) {
            return in_array('ignoreOnSaving', $field->meta);
        })
    );
}

在相关字段中,您可以添加:

->withMeta(['ignoreOnSaving'])

这将为您提供一个要填写的字段,而无需将其保存在模型中。

于 2020-04-22T08:48:13.257 回答
2

根据文档https://nova.laravel.com/docs/1.0/resources/fields.html#showing-hiding-fields

Select::make('Contract Types')
    ->options($array_of_options)
    ->hideWhenCreating()
于 2018-10-30T10:36:13.240 回答
0

您可以对 Field 数据进行自定义处理,只需使用fillUsing()Field 类的方法。一个例子

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),
        Text::make('Name', 'name'),
        Text::make('Email', 'email'),
        Select::make('Contract Types', 'unique_key_for_model')
            ->options($array_of_options)
            ->fillUsing(function(NovaRequest $request, $model, $attribute, $requestAttribute) {
                /*
                    $request->input('unique_key_for_model') // Value of the field
                    $model->unique_key_for_model // DOES NOT exists, so no errors happens
                */
                // or just return null;
                return null;
            }),
    ];
}
于 2020-10-15T18:52:55.500 回答