RESTful 从 Angular 到 Sails.js 的日期查询
A RESTful query from Angular to Sails.js with dates
我正在使用 sails-mysql Waterline 适配器将 Sails,js 与我的 Mysql 数据库连接,该数据库以这种格式存储日期:"YYYY-MM-DD HH:MM:SS"。
在默认 Sails.js 蓝图不变的情况下,我正在从 Angular.js 服务中执行以下查询:
CheckAvailability: function(arrival,departure,room){
departure = moment(departure).endOf('day').format();
arrival = moment(arrival).startOf('day').format();
var bookingList = $resource(IP_ADDRESSES.dbserver+'bookings');
return bookingList.query({
or:[{
departure: {'>=': arrival},
departure: {'<=': departure}
},{
arrival:{'>=':arrival},
arrival:{'<=':departure}
},{
arrival: {'<=': arrival},
departure: {'>=': departure}
}
],
where:{room:room}}).$promise;
}
返回结果不正确,我得到了所选房间的所有预订,而不是只收到超订房间。
我通常将 ISO 8601 字符串与 where
结合使用。
Moment 具有 endOf()
和 startOf()
函数,可用于获取 "last/fisrt instant of a day",未参数化的 format()
将转换为 ISO 8601 字符串:
CheckAvailability: function(arrival,departure,room){
arrival = moment(arrival);
departure = moment(departure);
var bookingList = $resource(IP_ADDRESSES.dbserver+'bookings');
return bookingList.query({
or:[{
departure: {'>=': arrival.startOf('day').format()},
departure: {'<=': departure.endOf('day').format()}
},{
arrival:{'>=':arrival.startOf('day').format()},
arrival:{'<=':departure.endOf('day').format()}
},{
arrival: {'<=': arrival.endOf('day').format()},
departure: {'>=': departure.startOf('day').format()}
}],
where:{room:room}})
.$promise;
您确定在同一个请求中混合使用 query
和 where
有效吗?我认为它 应该 工作,这要归功于对蓝图路线的隐式 actionUtil.parseCriteria(req)
调用;但值得尝试将日期查询嵌入 inside where
。听起来 where
是唯一处理的条件,不是吗?
注意:稍后 parseCriteria
会抢到 link,我现在在 iPad。
这个
or:[{
departure: {'>=': arrival},
departure: {'<=': departure}
},{
arrival:{'>=':arrival},
arrival:{'<=':departure}
},{
arrival: {'<=': arrival},
departure: {'>=': departure}
}]
不是有效的水线条件。
AND
运算符是通过将多个运算符添加到同一个键来完成的:
or:[{
departure: {'>=': arrival, '<=': departure},
},{
arrival:{'>=':arrival, '<=':departure},
},{
arrival: {'<=': arrival},
departure: {'>=': departure}
}]
顺便说一句,请注意 var b = {a:1, a:2}
是 Javascript 胡说八道。你会得到一个唯一的 b.a
属性 ,其值为...嗯...我想这完全取决于实现(Node.js,浏览器)并且是不可预测的?
我正在使用 sails-mysql Waterline 适配器将 Sails,js 与我的 Mysql 数据库连接,该数据库以这种格式存储日期:"YYYY-MM-DD HH:MM:SS"。 在默认 Sails.js 蓝图不变的情况下,我正在从 Angular.js 服务中执行以下查询:
CheckAvailability: function(arrival,departure,room){
departure = moment(departure).endOf('day').format();
arrival = moment(arrival).startOf('day').format();
var bookingList = $resource(IP_ADDRESSES.dbserver+'bookings');
return bookingList.query({
or:[{
departure: {'>=': arrival},
departure: {'<=': departure}
},{
arrival:{'>=':arrival},
arrival:{'<=':departure}
},{
arrival: {'<=': arrival},
departure: {'>=': departure}
}
],
where:{room:room}}).$promise;
}
返回结果不正确,我得到了所选房间的所有预订,而不是只收到超订房间。
我通常将 ISO 8601 字符串与 where
结合使用。
Moment 具有 endOf()
和 startOf()
函数,可用于获取 "last/fisrt instant of a day",未参数化的 format()
将转换为 ISO 8601 字符串:
CheckAvailability: function(arrival,departure,room){
arrival = moment(arrival);
departure = moment(departure);
var bookingList = $resource(IP_ADDRESSES.dbserver+'bookings');
return bookingList.query({
or:[{
departure: {'>=': arrival.startOf('day').format()},
departure: {'<=': departure.endOf('day').format()}
},{
arrival:{'>=':arrival.startOf('day').format()},
arrival:{'<=':departure.endOf('day').format()}
},{
arrival: {'<=': arrival.endOf('day').format()},
departure: {'>=': departure.startOf('day').format()}
}],
where:{room:room}})
.$promise;
您确定在同一个请求中混合使用 query
和 where
有效吗?我认为它 应该 工作,这要归功于对蓝图路线的隐式 actionUtil.parseCriteria(req)
调用;但值得尝试将日期查询嵌入 inside where
。听起来 where
是唯一处理的条件,不是吗?
注意:稍后 parseCriteria
会抢到 link,我现在在 iPad。
这个
or:[{
departure: {'>=': arrival},
departure: {'<=': departure}
},{
arrival:{'>=':arrival},
arrival:{'<=':departure}
},{
arrival: {'<=': arrival},
departure: {'>=': departure}
}]
不是有效的水线条件。
AND
运算符是通过将多个运算符添加到同一个键来完成的:
or:[{
departure: {'>=': arrival, '<=': departure},
},{
arrival:{'>=':arrival, '<=':departure},
},{
arrival: {'<=': arrival},
departure: {'>=': departure}
}]
顺便说一句,请注意 var b = {a:1, a:2}
是 Javascript 胡说八道。你会得到一个唯一的 b.a
属性 ,其值为...嗯...我想这完全取决于实现(Node.js,浏览器)并且是不可预测的?