具有多个表和别名的KnexJS

时间:2019-03-01 13:30:36

标签: mysql node.js knex.js

最近我一直在使用KnexJS,并且已经从KnexJS文档中获得了大部分所需的信息,但是我有一个更复杂的MySQL查询,无法单独将其移植到Knex。我知道可以使用.raw(),但是如果可能的话,我想避免这种情况。

我正在工作的MySQL查询如下:

SELECT A.profile_id, C.model_name, D.brand_name, A.car_plate
FROM carsdb.profiles_has_cars A,
     carsdb.profiles B,
     carsdb.brands_cars C,
     carsdb.brands D
WHERE A.profile_id = B.user_id AND
      A.car_id = C.id AND
      A.brand_id = D.id;

到目前为止,我得到的是:

  return new Promise((resolve, reject) => {
    db({
      A: "profiles_has_cars",
      B: "profiles",
      C: "brands_cars",
      D: "brands"
    })
      .select("A.profile_id", "C.model_name", "D.brand_name", "A.car_plate")
      .where({
        "A.profile_id": userId,
        "A.car_id": "C.id",
        "A.brand_id": "D.id"
      })
      .then(results => {
        if (results > 0) {
          resolve(results);
        } else {
          reject("There is a problem with a query");
        }
      });
  });

我也曾尝试在.where()中使用对象作为参数,但这也没有做任何事情。

有什么帮助或建议吗?

1 个答案:

答案 0 :(得分:0)

哦,知道了。 knex不了解.where值实际上是对另一个字段的引用,并将它们解释为字符串。

尝试为每个.whereRaw("A.car_id = C.id")再用一个替换。 (仅用于参考,不用于实际值。)