0

我想使用 jQuery QueryBuilder 插件获取 SQL 语句。使用默认条件“AND”和“OR”时,一切都完全按照我的意愿工作。但是,当我尝试使用“XOR”条件时,会出现错误(见下文)。

这是我的 QueryBuilder 代码:

$(document).ready(function () {
  var options = {
    allow_empty: true,

    filters: [
      {
        id: "name",
        label: "Name",
        type: "string",
        default_value: "Noah",
        size: 30,
        unique: true,
      },
    ],

    /* XOR does not work with SQL */
    conditions: ["AND", "OR", "XOR"],
  };

  $("#builder").queryBuilder(options);

  $(".parse-json").on("click", function () {
    var res = $("#builder").queryBuilder("getSQL", $(this).data("stmt"), false);
    console.log(
      res.sql +
        (res.params ? "\n\n" + JSON.stringify(res.params, undefined, 2) : "")
    );
  });
});

这是我网站上 QueryBuilder 的示例图像: 单击此处

如前所述,当我选择“或”条件时,我得到了所需的 SQL 语句。

name = ? OR name = ?

[
  "Noah",
  "James"
]

但是当我选择“XOR”条件时,我收到一条错误消息:

Uncaught Error: Unable to build SQL query with condition "XOR"
  at Function.error (jquery-2.x-git.min.js:2)

在这里你可以找到给出错误的文件:jquery-2.x-git.min.js:2

我已经在互联网上搜索了 2 个多小时,但我找不到任何远程指向那个方向的东西。任何帮助是极大的赞赏。

**值得注意的一点是,当将规则提取为对象而不是 SQL 语句时,“XOR”条件有效。在这里,您可以看到用于将语句作为对象获取的代码:

$(".parse-json").on("click", function () {
  console.log(
    JSON.stringify($("#builder").queryBuilder("getRules"), undefined, 2)
  );
});
4

1 回答 1

1

不,这是不可能的,该conditions属性只允许'AND''OR'作为值,如文档中所述:

姓名 类型 默认 描述
[…]
条件 细绳[] ['与','或'] 可用组条件的数组。使用lang选项更改标签。
[…]

看起来 2018 年报告了一个问题,但没有任何明显的解决方案就关闭了:https ://github.com/mistic100/jQuery-QueryBuilder/issues/645


我研究了更多,它并不那么明确。显然,存储库中甚至有使用“XOR”和“NAND”作为条件的测试:https ://github.com/mistic100/jQuery-QueryBuilder/blob/dev/tests/core.module.js 。这与文档所述相反。

于 2022-01-12T18:36:16.520 回答