如何在 Laravel Nova 中忽略数据库操作中的字段

Wai*_*ein 3 laravel laravel-nova

我正在使用 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
        ];
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Rem*_*mko 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);
        })
    );
}
Run Code Online (Sandbox Code Playgroud)

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

->withMeta(['ignoreOnSaving'])
Run Code Online (Sandbox Code Playgroud)

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