具有多个表和别名的 KnexJS

KnexJS with multiple tables and aliases

我最近一直在玩 KnexJS,我已经从 KnexJS 文档中获得了我需要的大部分内容,但是我有一些更复杂的 MySQL 查询,我无法 'port'我自己去 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() 中使用一个对象作为参数,但那也没有做任何事情。

有什么帮助或建议吗?

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

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