我正在尝试建立一个预订机制,该机制不允许用户有两个重叠的预订。用户必须输入预订的日期范围,该日期范围将存储在Firebase(Cloud Firestore)中。在完成预订之前,我要检查它是否与此用户的另一个预订重叠。
我为每个预订请求存储了这两个变量,我想将其用于此查询:
selectedStartDate(时间戳) selectedEndDate(时间戳)
我尝试的方法无效:
bool overlappingBookingDateCheck(currentUserId, selectedDate) {
bool unavailable = false;
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('users')
.doc(currentUserId)
.collection('bookings')
.where("status", isEqualTo: "active")
.where("selectedStartDate",
isGreaterThanOrEqualTo: selectedDate.start)
.where("selectedEndDate", isLessThanOrEqualTo: selectedDate.end)
.snapshots(),
builder: (ctx, streamSnapshot) {
if (streamSnapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
// If there was a match in firebase, then there is an
// overlapping booking, so return unavaiable is true
if (streamSnapshot.hasData) {
unavailable = true;
}
});
return unavailable;
}
此代码有几个问题。一种是多重where语句是AND而不是OR。这使我无法检查开始日期或结束日期是否与另一个预订重叠。在两种情况下,都应拒绝预订。第二个是我收到一个错误,该错误无法用不等号运算符(<,<=,>或> =)过滤多个字段。
如果有人能帮助我如何获得所需的查询(检查所请求的预订日期范围是否与现有预订重叠),将感到非常高兴。
谢谢!