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