laravel-admin 的 between()->datetime();

laravel 版本 6.5.2

laravel-admin 版本 1.5

 

下面是laravel-admin 的一个筛选组件datetime,第一个选项可以格式化组件样式,比如只筛选年,或者月啥的,第二个参数是我自己加的

$grid->filter(function ($filter) {
    $filter->disableIdFilter();
    $filter->between('create_time', 'Created Time')->datetime([],true);
});

会生成一个这样的筛选框,我用这个来筛选数据的创建时间,字段:create_time

但是会有一个问题,create_time字段是时间戳格式的,而这个筛选,是字符串

跟踪源码,找到了这个datetime方法,在 vendor/encore/laravel-admin/src/Grid/Filter/Between.php,下面是解决方法

1,在Between类中加入$timestamp属性

2,在Between类中的 condition 方法里加上判断

public function condition($inputs)
{
    if (!Arr::has($inputs, $this->column)) {
        return;
    }

    $this->value = Arr::get($inputs, $this->column);

    $value = array_filter($this->value, function ($val) {
        return $val !== '';
    });

    if (empty($value)) {
        return;
    }

    if (!isset($value['start'])) {
        return $this->buildCondition($this->column, '<=', $value['end']);
    }

    if (!isset($value['end'])) {
        return $this->buildCondition($this->column, '>=', $value['start']);
    }

    $this->query = 'whereBetween';
        
    //下面这4行
    if($this->timestamp){
        $this->value['start'] = strtotime($this->value['start']);
        $this->value['end'] = strtotime($this->value['end']);
    }

    return $this->buildCondition($this->column, $this->value);
}

3,在 datetime 方法中设置 timestamp 的值

public function datetime($options = [],$timestamp = false)
{
    $this->view = 'admin::filter.betweenDatetime';

    $this->setupDatetime($options);

    $this->timestamp = $timestamp;

    return $this;
}

4,回到开头,在调用datetime方法的时候,第二个参数传true就可以了

============================================================================================

调用顺序

$grid->filter方法 >> HasFilter类 >> filter方法 >> Filter类 >> __call方法 >> Between类 >> date
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值