Sails js:来自 mysql 的 select 条记录?
Sails js: select records from mysql?
我正在尝试 select 来自 table 的所有记录称为 fairCustomer,其中 business_type_id 值数组相等。
我将 sailsjs 用于服务器,将 mysql 用于数据库,在前端我将 nativescript 与打字稿一起使用。
这是我的代码:
filterShopType(){
this.service.serviceName = 'fairCustomers';
this.service.Get({ populate:'country_id,business_type_id',where:{ business_type_id:{ in:this.business_ids_filter } }, limit:20 }).then((data: any) => {
this.fairCustomers.splice(0, this.fairCustomers.length);
this.fairCustomers.push(data);
this.Refresh('fairCustomers');
}).catch((err) => {
console.log('failed get fairCustomers from server ', err);
});
}
service 引用 http.request(),我在代码的另一个地方使用它。
business_ids_filter 是一个 id 数组。
当我 运行 此代码时,我收到此错误:
"消息": "Could not parse the provided where
clause. Refer to the Sails documentation for up-to-date info on supported query language syntax:\n(http://sailsjs.com/documentation/concepts/models-and-orm/query-language)\nDetails: Unrecognized sub-attribute modifier (in
) for business_type_id
. Make sure to use a recognized sub-attribute modifier such as startsWith
, <=
, !
, etc. )",
如果我删除 where 我得到一个错误结果。
请问有人有什么想法或解决办法吗?
您可以按照此处所述尝试使用本机查询,https://sailsjs.com/documentation/reference/waterline-orm/datastores/send-native-query
据我所知,您可以简单地提供一组项目。与数组中的任何项目匹配意味着该记录应作为结果的一部分返回。不确定它是否适用于 where
-clause。
文档:Query Language(滚动到:在修饰符中)
我确实和你一样困惑为什么给定的查询不起作用,因为文档声明 in
应该有效,但也许它在 where:{...}
中无效?我假设您在 .Get(...)
中使用 .find()
?只需将查询原封不动地代理到 .find()
?
filterShopType(){
this.service.serviceName = 'fairCustomers';
this.service.Get({
populate:'country_id, business_type_id',
business_type_id: this.business_ids_filter,
limit:20
})
.then((data: any) => {
this.fairCustomers.splice(0, this.fairCustomers.length);
this.fairCustomers.push(data);
this.Refresh('fairCustomers');
}).catch((err) => {
console.log('failed get fairCustomers from server ', err);
});
}
现在,如果您使用 in:
,您当然需要确保该数组确实是一个数组。
它通过使用 [or] 而不是 [in] 与我合作,这是代码
filterShopType(){
if(this.business_ids_filter){
this.service.serviceName = 'fairCustomers';
var arr = [];
this.business_ids_filter.forEach( (id) => {
arr.push({ business_type_id: id })
});
let where = {};
if(arr.length > 0){
where = {or: arr};
}
this.service.Get({ populate: 'country_id,business_type_id',where:where , limit:20 }).then((data: any) => {
this.filterItems.splice(0, this.filterItems.length);
this.filterItems.push(data);
this.Refresh('filterItems');
}).catch((err) => {
console.log('failed get fair Customers from server ', err);
});
}else{
this.set('isFilter', false);
}
}
我正在尝试 select 来自 table 的所有记录称为 fairCustomer,其中 business_type_id 值数组相等。 我将 sailsjs 用于服务器,将 mysql 用于数据库,在前端我将 nativescript 与打字稿一起使用。
这是我的代码:
filterShopType(){
this.service.serviceName = 'fairCustomers';
this.service.Get({ populate:'country_id,business_type_id',where:{ business_type_id:{ in:this.business_ids_filter } }, limit:20 }).then((data: any) => {
this.fairCustomers.splice(0, this.fairCustomers.length);
this.fairCustomers.push(data);
this.Refresh('fairCustomers');
}).catch((err) => {
console.log('failed get fairCustomers from server ', err);
});
}
"消息": "Could not parse the provided where
clause. Refer to the Sails documentation for up-to-date info on supported query language syntax:\n(http://sailsjs.com/documentation/concepts/models-and-orm/query-language)\nDetails: Unrecognized sub-attribute modifier (in
) for business_type_id
. Make sure to use a recognized sub-attribute modifier such as startsWith
, <=
, !
, etc. )",
如果我删除 where 我得到一个错误结果。
请问有人有什么想法或解决办法吗?
您可以按照此处所述尝试使用本机查询,https://sailsjs.com/documentation/reference/waterline-orm/datastores/send-native-query
据我所知,您可以简单地提供一组项目。与数组中的任何项目匹配意味着该记录应作为结果的一部分返回。不确定它是否适用于 where
-clause。
文档:Query Language(滚动到:在修饰符中)
我确实和你一样困惑为什么给定的查询不起作用,因为文档声明 in
应该有效,但也许它在 where:{...}
中无效?我假设您在 .Get(...)
中使用 .find()
?只需将查询原封不动地代理到 .find()
?
filterShopType(){
this.service.serviceName = 'fairCustomers';
this.service.Get({
populate:'country_id, business_type_id',
business_type_id: this.business_ids_filter,
limit:20
})
.then((data: any) => {
this.fairCustomers.splice(0, this.fairCustomers.length);
this.fairCustomers.push(data);
this.Refresh('fairCustomers');
}).catch((err) => {
console.log('failed get fairCustomers from server ', err);
});
}
现在,如果您使用 in:
,您当然需要确保该数组确实是一个数组。
它通过使用 [or] 而不是 [in] 与我合作,这是代码
filterShopType(){
if(this.business_ids_filter){
this.service.serviceName = 'fairCustomers';
var arr = [];
this.business_ids_filter.forEach( (id) => {
arr.push({ business_type_id: id })
});
let where = {};
if(arr.length > 0){
where = {or: arr};
}
this.service.Get({ populate: 'country_id,business_type_id',where:where , limit:20 }).then((data: any) => {
this.filterItems.splice(0, this.filterItems.length);
this.filterItems.push(data);
this.Refresh('filterItems');
}).catch((err) => {
console.log('failed get fair Customers from server ', err);
});
}else{
this.set('isFilter', false);
}
}