laravel admin筛选 时间戳搜索

laravel admin筛选 时间戳搜索
laravel admin筛选 时间戳搜索
数据库用的是int存的时间戳 用上面的搜索无法查询时间戳,求指教
找到了解决办法:
首选在app/Admin/Extensions/Grid目录下新建FilterBetween类,继承Encore\Admin\Grid\Filter\Between并重写condition方法

<?php
namespace App\Admin\Extensions\Grid;

use Illuminate\Support\Arr;
use Encore\Admin\Grid\Filter\Between;

/**
 * 查询区间过滤
 */
class FilterBetween extends Between
{
    // 数据处理回调
    protected $valueMapCallback = null;
    // 设置数据处理回调
    public function valueMap( callable $c ) {
        $this->valueMapCallback = $c;

        return $this;
    }
    // 时间搓数据 将数据转为时间搓
    public function timestampValue() {
        $this->valueMapCallback = function($v) {
            return \strtotime( $v );
        };

        return $this;
    }

    /**
     * Get condition of this filter.
     *
     * @param array $inputs
     *
     * @return mixed
     */
    public function condition($inputs)
    {
        if ($this->ignore) {
            return;
        }

        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;
        }
        // begin 新增的代码, 有数据处理回调时将数据处理一遍
        if( $this->valueMapCallback ) {
            $value = \array_map( $this->valueMapCallback, $value );
        }
        // end
        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';

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

在app/Admin/bootstrap.php中,将表格查询过滤的between类型的实现类替换为新建的FilterBetween类

// 文件头部添加
use Encore\Admin\Grid\Filter;
use App\Admin\Extensions\Grid\FilterBetween;

// ...
// 替换
Filter::extend( 'between',  FilterBetween::class);

添加时间区间过滤时开启数据处理回调就可以了

  $grid->filter(function( $filter )use($types) {
      // ...
      // 调用 timestampValue 函数开启数据转时间搓回调
      $filter->between('start_time', __("Start time"))->datetime()->timestampValue();
      // ...
  });
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

whereBetween

2年前 评论
HinataiLiang (楼主) 2年前
canbez (作者) 2年前
HinataiLiang (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!