如何在 laravel nova 管理面板中定义时间字段

Posted

技术标签:

【中文标题】如何在 laravel nova 管理面板中定义时间字段【英文标题】:how to define time Field in laravel nova admin panel 【发布时间】:2020-01-01 17:40:57 【问题描述】:

我的数据库中有时间列。我需要为此列定义字段。

这是我的迁移:

 $table->date('date');
            $table->time('time_begin');
            $table->time('time_Enable');

这是我的资源:

    public function fields(Request $request)
    
        return [

            datetime::make('time_Enable'),
            datetime::make('time_begin'),

        ];
    

我只需要时间而不是日期和时间

【问题讨论】:

【参考方案1】:

令人印象深刻的是,Nova 不仅没有 Time 字段,而且不支持 DateTime 字段的仅时间用法。

另一方面,Nova 有很多第三方组件,可以通过 composer 轻松添加。我确实在Nova Packages 上寻找了一些,并找到了两个可行的选项:Laraning Time Field 和Michielfb Time Field,它们似乎相当不错并且是开源的。

尽管如此,它们在 GitHub 上的 star 相对较少,并且最新版本相当旧,对于如此简单的功能来说这不是什么大问题,但我宁愿使用原生功能,所以这就是我的实现方式:

Text::make('Duration')
    ->placeholder('##:##:##')
    ->rules('date_format:"H:i:s"')
    ->help('hh:mm:ss'),

所以基本上我使用了带有格式验证的文本字段。还添加了占位符和帮助属性,使其更直观。它运作良好!我将它与time 数据库字段一起使用。其他大学建议使用遮罩组件,但它也需要第三方组件,我没有找到好的选择。

【讨论】:

【参考方案2】:

来自docs 您可以使用 format 方法自定义 DateTime 字段的显示格式。格式必须是Moment.js支持的格式:

DateTime::make('time_Enable')->format('H mm'),
DateTime::make('time_begin')->format('H mm'),

【讨论】:

以上是关于如何在 laravel nova 管理面板中定义时间字段的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Laravel 中为 Nova 资源显式定义策略?

Laravel Nova 自定义字段获取模型值

Laravel Nova 多态多对多关系不起作用

Laravel Nova自定义工具创建:vue组件不刷新

Laravel Nova:如何创建自定义字段及其 crud 方法?

Laravel Nova Resource,在布局中组合字段?