【问题标题】:Laravel Nova - Map database json column to fieldLaravel Nova - 将数据库 json 列映射到字段
【发布时间】:2019-02-22 11:50:26
【问题描述】:

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

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

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

我检查了支持的field types,似乎不支持。

有什么建议吗?

【问题讨论】:

    标签: laravel laravel-5.6 laravel-nova


    【解决方案1】:

    例如,“desc”列的值类似于:

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

    你可以直接用表格格式:

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      以下是我在 Nova 2.0 中实现此目的的方法。在我的例子中,我有一个名为 fields 的 JSON 列。在模型中,fields 被强制转换为数组。

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

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

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

      【讨论】:

        【解决方案3】:

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

        使用 Eloquent Mutator:Eloquent Mutators

        然后你定义一个 getDescAttribute 和一个 setDescAttribute 并像这样在模型上的属性一样将它传递给 nova:

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

        希望这会有所帮助。

        【讨论】:

        • 当“desc”和“width”是动态属性并且您不知道这些属性的完整列表时,问题就来了。有什么想法吗?
        • @ArmeniaH 您可以从 ->fields 获取数组,遍历键,并根据需要在编辑上下文中添加字段。这将在索引视图中变得一团糟,因为每一行在数组中可能有不同的键。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        • 2023-03-09
        • 1970-01-01
        • 2015-12-26
        • 2014-03-15
        • 1970-01-01
        • 2016-06-24
        相关资源
        最近更新 更多