在 JSON 列中存储多个字段 (Nova CMS)

Store multiple fields in JSON column (Nova CMS)

我的帖子 table 有一个 json 列“read_more_section”。

我想在该列中存储有关 NOVA CMS 上某些字段的信息(标题、描述、标签和 link)。你知道如何在 Nova 中正确地做到这一点吗?要存储在 json 列“read_more_section”的这 4 个字段中输入的内容?

 public function fields(Request $request)
    {
        return [
            ID::make(__('ID'), 'id')->sortable(),

                new Panel('Read More Section', [                

                    Text::make('Title')->rules(['max:255']),
                    Text::make('Description'),
                    Text::make('Label'),
                    Text::make('Link'),

                    
                ]),

               
        ];
    }

您可以创建 getter 和 setter,捕获这些字段的值并将其转换为 json 对象。

或者您可以使用 https://github.com/whitecube/nova-flexible-content 并在布局中设置 1 的限制。

https://whitecube.github.io/nova-flexible-content/#/?id=limiting-layouts-per-type https://whitecube.github.io/nova-flexible-content/#/?id=limiting-layouts

新星资源

 public function fields(Request $request)
    {
        return [
            ID::make(__('ID'), 'id')->sortable(),

                new Panel(__('Read More'), [                

                    Flexible::make('Specifications', read_more_section)
                       ->addLayout(ReadMoreLayout::class)
                       ->limit(1),
                    
                ]),

               
        ];
    }

ReadMoreLayout.php

class ReadMoreLayout extends Layout
{
    /**
     * The layout's unique identifier
     *
     * @var string
     */
    protected $name = 'title';

    /**
     * The displayed title
     *
     * @var string
     */
    protected $title = 'Read More Section';

    protected $limit = 1;

    /**
     * Get the fields displayed by the layout.
     *
     * @return array
     */
    public function fields()
    {
        return [
                Text::make('Title')->rules(['max:255']),
                Text::make('Description'),
                Text::make('Label'),
                Text::make('Link'),
        ];
    }
}