我有一个计算的权重和一个包含金额范围的数据库表,现在我想检查计算的权重是否在表中的范围之间。
如果表中的一条记录中的金额介于两者之间,我想检查一下。
例如,计算的权重是505kg
,如果它在weight_from
&weight_to
,因此它将返回120 amount
,因为505kg
在500 and 1000
之间
运费表
+-----+---------------+--------------+-------------+
| id | weight_from | weight_to | amount |
+-----+---------------+--------------+-------------+
| 1 | 0.5 | 100 | 100 |
| 2 | 500 | 1000 | 120 |
| 3 | 1000 | 3000 | 180 |
+-----+---------------+--------------+-------------+
我发现了这样的东西,但它不像我试图做的那样,因为它传递了一个数字,而没有得到数据库表的值。
仅供参考的代码
$fee = Fee::whereBetween('column', [1, 150])->first();
whereBetween()
用于查找单列内某个范围内的值。由于您在两个不同的列之间进行检查,因此检查需要明确。
$weight = 505;
$fee = Fee::where('weight_from', '<=', $weight)
->where('weight_to', '>=', $weight)
->orderBy('weight_from')
->first();
if ($fee) {
// Do something with $fee->amount;
}
您不应该使用<
,范围应该包括在内。这样做的原因与另一个答案相反如果下一个范围从相同的值开始则使用CCD_ 9作为上限";,范围可能不总是与下一批的起始限制相同(例如,提供的样本数据的范围从0.5到100,但没有从100-500(。如果没有,那么突然间你就错过了一个值。最好使用orderBy()
来查找正确的记录。再加上first()
,你只能得到一张唱片。
我现在明白了,我想分享这个简单但有用的解决方案。这种逻辑太令人困惑了。
代码
$weight = 505;
$fee = Fee::where('weight_from', '<=', $weight)
->where('weight_to', '>', $weight)
->first();
if ($fee) {
// Do something with $fee->amount;
}
weight_from
应小于(或等于(计算重量,weight_to
应大于计算重量
此外,如果下一个范围从相同值开始,则使用>
作为上限。
感谢Laracasts的tykus和MichalOravec帮助我