最近我一直在使用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()
中使用对象作为参数,但这也没有做任何事情。
有什么帮助或建议吗?
答案 0 :(得分:0)
哦,知道了。 knex
不了解.where
值实际上是对另一个字段的引用,并将它们解释为字符串。
尝试为每个.whereRaw("A.car_id = C.id")
再用一个替换。 (仅用于参考,不用于实际值。)