Sails js:从mysql中选择记录?

时间:2019-01-28 15:14:39

标签: mysql typescript sails.js

我正在尝试从名为fairCustomer的表中选择所有记录,其中business_type_id等于值数组。 我在服务器上使用sailsjs,在数据库上使用mysql,在前端,我在打字机上使用nativescript。

这是我的代码:

NOT EXISTS
服务请参阅http.request(),我在代码的其他位置使用它。 business_ids_filter 是ID数组。 当我运行此代码时,出现此错误:

消息”:“无法解析提供的 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); }); }子句。有关支持的查询语言语法的最新信息,请参见Sails文档:\ n({{ 3}})\ n详细信息:where的无法识别的子属性修饰符(in)。请确保使用可识别的子属性修饰符,例如business_type_idstartsWith<=等)”,

,如果我删除了位置,则会得到错误结果。

请问有人有什么想法或解决方案吗?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

据我所知,您只需提供一系列项目即可。与数组中的任何项目匹配意味着记录应作为结果的一部分返回。但不确定是否可以在where子句中使用。

文档: Query Language(滚动至:在修改器中)


我确实对您为什么给定查询不起作用感到困惑,因为文档指出in应该是有效的,但在where:{...}内部可能无效?我假设您在.find()中使用.Get(...)吗?只需将未更改的查询代理到.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:,那么您当然需要确保该数组实际上是一个数组。

答案 2 :(得分:0)

使用[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);
        }
    }