【问题标题】:DataTables AJAX search uses ambiguous columnsDataTables AJAX 搜索使用不明确的列
【发布时间】:2015-11-05 17:33:29
【问题描述】:

特定 DataTable 的输出必须在多个表上使用 LEFT JOIN 才能获取所需的数据。当我在 DataTable 的搜索框中输入任何内容时,当它尝试向远程服务器询问搜索结果时,我会收到错误 SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous

加载初始表 AJAX 请求的服务器端查询:

select
    orders.*,
    orders.id as id,
    order_items.*
left join order_items
    orders.id on order_items.order_id
where
    orders.store_id = 1
group by
    orders.id

当 DataTables 1.10 将其自动搜索过滤器添加到原始查询时,它会将其发送到 PHP 服务器端处理程序包 yajra/laravel-datatables-oracle:3.0,然后将其附加到查询的 WHERE 部分并返回新的过滤结果。

如何强制 DataTables(在 jQuery 端或 PHP 服务器端)在通过 AJAX 发送请求之前将相关的表名称添加到搜索字段?

【问题讨论】:

  • 当然由您决定如何在查询中使用参数?请出示服务端查询代码。
  • @markpsmith 这正是我想要弄清楚如何控制的。目前,DataTables 自行做出决定。请查看更新后的帖子。
  • 我想知道是不是因为您返回了两次 orders.id - 一次在 orders.* 和一次 orders.id as id。尝试删除行orders.id as id
  • 啊,对了 - 所以你实际上有 3 个字段称为 id。你能改变查询只返回你想要的列,而不是使用*吗?

标签: jquery datatables datatables-1.10


【解决方案1】:

我有一个类似的问题,偶然找到了答案,虽然我知道这是一个老问题,但我想我会在这里发布我的答案。

在我的例子中,我有两个 SQL 表(Offices 和 Regions),它们都有一个 id 字段。使用分页时,我会收到与您相同的错误。

为了解决这个问题,我需要在 JavaScript 中的列上设置 name 属性。这使得分页可以正常工作而不会出现任何问题。

     dtbl = $('#tblReport').DataTable( {
          columns: [
               { data: 'id', name: 'offices.id', visible: false },
               { data: 'name' }
          ], 
          "serverSide": true
     });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2023-03-26
    相关资源
    最近更新 更多