如何使用 sails-filemaker 查找一系列记录?

How to find a range of records using sails-filemaker?

我在使用 sails-filemaker 的查找条件或 where 条件时遇到问题。根据我在 sails 文档中阅读的内容,我使用了正确的标准。我正在使用的解决方法是不使用查找或位置条件,并在查找后删除记录。可以用于非常小的记录集,但它并不优雅。

var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find().where().exec(function(error,staff){
    /* remove staff members who are not account managers or artists */
    for ( index = staff.length-1; index > 0; index--) {
        var staffMember = staff[index];
        if ( staffCriteriaFind.roleId.indexOf( staffMember.roleId ) == -1 ) {
            staff.splice([index],1) ;
        }
    }
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});

员工模型为

/**
* Staff.js
*
* @description :: Staff employed by the business
* @docs        :: http://sailsjs.org/#!documentation/models
*/

module.exports = {

    connection: 'filemaker',
    tableName: 'staff-list-api-layout',

    autoPK:false ,
    autoCreatedAt: false ,
    autoUpdatedAt: false ,

  attributes: {
        id: {
            columnName: 'staff_id_',
            type: 'integer',
            primaryKey: true,
            unique:true
        } , 
        role:{
            columnName:'staff_role::role',
            type: 'string'
        },
        timesheetSort:{
            columnName:'staff_role::timesheet_sort',
            type:'string'
        },
        roleId:{
            columnName: 'role_id',
            type: 'integer',
            foreignKey: true
        },
        name:{
            columnName:'full_name',
            type: 'string'
        },
        createdAt:{
            type:'date'
        },
        updatedAt:{
            type:'date'
        }
  }

};

如果我使用

var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find(staffCriteriaFind).where().exec(function(error,staff){
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});

我得到所有 roleId = 1 和 none roleId = 2 的员工。

如果我使用

var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find().where(staffCriteriaWhere).exec(function(error,staff){
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});

我根本没有员工记录...

将 findCriteria 或 whereCriteria 与 sails-filemaker 一起使用的正确方法是什么,其中需要 or 搜索一系列值?

Todd Geist 是最好的询问对象,但我可以尝试猜测

您的 Staff.find 可能使用了 FileMaker 查找功能,因此它一次只能查找一个参数。尝试使用 {roleId:[2,1]} 代替,您可能会得到所有 roleId = 1

问题是,我在 sales-filemaker 的任何地方都找不到 find().where。我认为您正在查看 newFindRequest(fmLayout, options.where) ,它是一个参数而不是方法。

尝试 staff.find(staffCriteriaWhere),这可能有效

不好意思, 是 sails 方法,不是 sales-filemaker。

我认为你应该试试这个:

Staff.find().where({roleId:1 },{roleId:2 })

Staff.find().where({roleId:1 }).where({roleId:2 })

我最终使用了 filemaker 脚本,将参数传递给该脚本,然后提取 roleId 以在 filemaker 中执行查找。

var staffCriteria = {
                          'staff_id_' : '>0',
                          '-script' : 'find-staff-api-script',
                          '-script.param' : '{roleId:[1,2]}'
                    };
                    Staff.find(staffCriteria).where().exec(function(error,staff){

                        if ( error ) {
                            result.error = error ;
                            result.staffCriteria = staffCriteria ;
                        }
                        result.staff = staff ;
                        return res.send(responseCode, result ) ;    
                    });

有关更多示例,请参阅 https://gist.github.com/toddgeist/13157485b81f3e2b985e

经过一番折腾,我发现您可以在查找函数中使用 Filemakers 范围术语“...”。

staff.find({ a_StaffID: '1...12', position: '100...400' })
.then('do whatever you need to do with the returned data')
.catch('do whatever you need to do with any error')