具有多个表和别名的 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")
替换一个。 (仅供参考,不作为实际值)
我最近一直在玩 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")
替换一个。 (仅供参考,不作为实际值)