Laravel Nova - 将数据库 json 列映射到字段



我有一个json列类型的数据库模型,名为attributes。此列将包含模型的其他详细信息。

例如:attributes : {'desc' : 'test', 'width' : '500'}.

我想在attributes列中将单个属性(descwidth(显示为Laravel管理资源中的html字段。

我检查了支持的字段类型,但似乎不支持。

有什么建议我该怎么做?

以下是我在Nova 2.0中实现这一目标的方式。就我而言,我有一个名为字段的 JSON 列。在模型中,字段被强制转换为数组。

protected $casts = [
'fields' => 'array'
];

然后在资源中,使用 -> 运算符映射列。

Text::make('Name', 'fields->name')

我不确定这是否是推荐的答案,但我找到了一种应该适合您的方法。

使用雄辩突变器:雄辩突变器

然后你定义一个getDescAttribute和一个setDescAttribute,并在nova中传递它,就像模型上的属性一样,如下所示:

Text::make('Desc', 'desc')

希望这有帮助。

例如,"desc"列的值如下所示:

"{attributes : {'desc' : 'test', 'width' : '500'}}"

你可以直接把它放在表格格式:

KeyValue::make('Desc', 'desc**.attributes**')

希望这有帮助

有一个包可以让您实现您想要的目标,而无需对模型的行为进行任何不必要的更改。

https://github.com/64robots/nova-fields

这将允许您将 JSON 数组的每个键定义为可以修改的实际字段。

最新更新