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

时间:2018-08-30 11:23:07

标签: laravel laravel-nova

我正在使用Laravel Nova开发Web应用程序。 Laravel Nova很新。我现在在数据库关系和字段方面遇到问题。我喜欢忽略数据库操作中的字段。这是我的情况。

在Job资源中,我有此字段方法

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列,因此抛出了错误。我喜欢从数据库操作中忽略该字段。我怎么能得到它?

3 个答案:

答案 0 :(得分:4)

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

我的建议是将以下内容添加到资源中(或在多个资源中放置可重用的位置):

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'])

这将为您提供一个无需填写即可填充的字段。

答案 1 :(得分:1)

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

Select::make('Contract Types')
    ->options($array_of_options)
    ->hideWhenCreating()

答案 2 :(得分:0)

您可以使用Field类的std::string s = "SerialNumber A6PZ etc etc..."; std::istringstream iss{s}; std::string ignore, a, b, c; if (iss >> ignore >> a >> b >> c) { std::string synonym = a + b + c; ...do whatever with synonym... } else std::cerr << "your string didn't contain four whitespace separated substrings\n"; 方法对自己的Field数据进行自定义处理。一个例子

fillUsing()