我在RTDB中有一个属性,该属性只能是以下一项之一:$wh1Summaries = Warehouse1StockSummaries::newQuery();
if($request->type == 'product_name'){
$wh1Summaries = $wh1Summaries->with(['product' => function($q) use ($query) {
$q->where('product_code','LIKE','%'.$query.'%');
}]);
} else {
$wh1Summaries = $wh1Summaries->with('product');
}
。
所以我试图以多种方式编写这种条件,但没有成功:
false, 5, 15, 30, 60
所以我最终得到了:
// Like in Firestore rules:
".write": "newData().val() in [false, 5, 15, 30, 60]"
// Like in ES6:
".write": "[false, 5, 15, 30, 60].includes(newData().val())"
// Like the old way:
".write": "[false, 5, 15, 30, 60].indexOf(newData().val()) > -1"
有没有什么办法可以检查".write": "(newData.val() === false || newData.val() === 5 || newData.val() === 15 || newData.val() === 30 || newData.val() === 60"
是否等于上述值之一而无需增加太多样板?
答案 0 :(得分:1)
一种紧凑的方法是使用正则表达式。因此,根据您的示例,您可以利用".write": "(newData.val()+'').matches(/^(false|5|15|30|60)$/)"
。
但是,您可能希望对数据类型更严格一些,所以这样的方法比较理想:".write": "newData.val() === false || (newData.isNumber() && (newData.val()+'').matches(/^(5|15|30|60)$/))"
下面是一个小提琴,演示了这种行为:http://jsfiddle.net/katowulf/m5gzt423/