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);
        }
    }