Yajara DataTable单日期精确筛选详解

作者:技术拾光

时间:2026-06-18

浏览:426

本文详解如何在 Lara vel 中使用 Yajara DataTable 实现按指定单日期(非日期范围)精确筛选数据,通过前端日期选择器 + 后端 whereDate 查询 + AJAX 传参,确保仅返回该日创建的记录。 刚好有读者聊到,在业务中经常需要按“某一天”而不是“某段时间”来查数据,比如

文章目录
本文详解如何在 Lara vel 中使用 Yajara DataTable 实现按指定单日期(非日期范围)精确筛选数据,通过前端日期选择器 + 后端 whereDate 查询 + AJAX 传参,确保仅返回该日创建的记录。

刚好有读者聊到,在业务中经常需要按“某一天”而不是“某段时间”来查数据,比如查看2023年10月7日当天的全部订单。这种单日期精确筛选,Yajara DataTable默认是没有内置的,需要自己动手集成。下面这套方案,直接拿过去就能用,分三步走:前端加日期选择器、后端安全解析参数、配上一点进阶优化。

前端:添加日期选择器并绑定 AJAX 参数

在视图里插一个标准的 HTML5 ,不依赖额外的JS初始化,只需要确保它的 name 和 id 和后端逻辑保持一致:

接着,在初始化 DataTable 的 Ja vaScript 里,通过 ajax.data 回调把选中的日期值动态注入请求参数:

$('#datatable').DataTable({    processing: true,    serverSide: true,    ajax: {        url: '/admin/orders/data', // 替换为你的数据接口路由        method: 'GET',        data: function (d) {            d.selected_date = $('#selected_date').val() || '';        }    },    columns: [        { data: 'id', name: 'id' },        { data: 'customer_name', name: 'customer_name' },        { data: 'created_at', name: 'created_at', render: function (data) {            return moment(data).format('YYYY-MM-DD HH:mm');        }},        // 其他列...    ]});

提示:这里建议搭配 moment.js 或原生 Intl.DateTimeFormat 来格式化时间列,表格看起来会整洁很多。

后端:控制器中安全解析并应用 whereDate

到了控制器那边,接收 selected_date 参数,然后用 Lara vel 的 whereDate() 方法做精确匹配——它会自动忽略时间部分,只比对年-月-日(这是核心技巧)。

use YajraDataTablesFacadesDataTables;use AppModelsOrder; // 替换为你的模型public function getData(Request $request){    $selectedDate = $request->input('selected_date');    $query = Order::query();    // 仅当日期有效时才添加筛选条件(避免空值导致全表扫描)    if (!empty($selectedDate) && CarbonCarbon::createFromFormat('Y-m-d', $selectedDate)->isValid()) {        $query->whereDate('created_at', $selectedDate);    }    return DataTables::of($query)        ->addColumn('action', function ($row) {            return '查看';        })        ->rawColumns(['action'])        ->make(true);}

这里有三件事得特别留心:

  • 第一,必须校验 $selectedDate 的格式有效性,防止恶意输入或空字符串引发SQL错误;
  • 第二,whereDate() 会自动把 created_at 字段转成 DATE() 类型比较,兼容 MySQL/PostgreSQL;
  • 第三,如果数据库里那张表的数据量不小,记得给 created_at 字段加个索引,比如 INDEX(created_at),否则全表扫描会很慢。

另外,如果用到了 updated_at 或其他时间字段,把字段名同步改掉就行。

进阶优化建议

  • 联动重载:给日期控件加上 change 事件,只要用户改了日期,表格自动重载:
$('#selected_date').on('change', function() {    $('#datatable').DataTable().ajax.reload();});

这样一来,数据表就能根据你选的日期自动刷新,用户体验就顺畅多了。

  • 默认日期:在 input 里设置 value="{{ now()->format('Y-m-d') }}",页面加载后默认显示今天的数据,省得用户手动选一次。
  • 多字段筛选:如果需求更复杂一点,可以扩展 data 函数,同时传递状态、类别等其他筛选参数,统一在后端用 where 组合条件。这个思路是一样的,改改参数名就行。

通过这三步,就可以零侵入地为 Yajara DataTable 添加精准的单日期筛选能力。既保持了代码的简洁性,也照顾到了安全性和可维护性,应该能应付大多数业务场景了。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›