如何使用 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')
我在使用 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')