laravel 检查金额是不是在记录之间
Posted
技术标签:
【中文标题】laravel 检查金额是不是在记录之间【英文标题】:laravel check amount if in between the recordslaravel 检查金额是否在记录之间 【发布时间】:2021-02-12 08:34:50 【问题描述】:我计算了一个重量,以及一个包含数量范围的数据库表,现在我想检查计算的重量是否在我的表中的范围之间。
我想检查金额是否在表中的一条记录之间。
例如计算出的权重是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();
【问题讨论】:
这不是和***.com/questions/64586967/…一样吗? 【参考方案1】:whereBetween()
用于在单个列的范围内查找值。由于您在两个不同的列之间进行检查,因此检查需要明确。
$weight = 505;
$fee = Fee::where('weight_from', '<=', $weight)
->where('weight_to', '>=', $weight)
->orderBy('weight_from')
->first();
if ($fee)
// Do something with $fee->amount;
您不应使用<
,范围应包含在内。其原因与另一个答案相反,即“如果下一个范围从相同的值开始,则使用>
作为上限”,该范围可能并不总是 与下一批的起始限制具有相同的上限(例如,提供的样本数据的范围是 0.5 到 100,但没有一个是 100-500)。如果没有,那么突然间你就失去了一个价值。最好使用orderBy()
来查找正确的记录。将其与first()
结合起来,您只会得到一条记录。
【讨论】:
我认为这不是我想要实现的,因为它没有在数据库记录中搜索提供的值,我只会检查表中的单个amount
,例如 505
,所以它将检查505
是否在表中的一条记录之间。
嗯,您需要将 1 和 150 替换为您发送的值。
我做到了,但它只会将搜索限制在该值,因为 >=
和 <=
它不会获得 500
和 1000
之间的范围
它将找到weight_from
大于或等于提供的权重,并且weight_to
小于或等于提供的权重。因此,提供的重量在从/到的范围之间。如果您要求不同的东西,那很不清楚,您应该通过所需输入/输出的明确示例来澄清您的问题。根据我在您的问题中收集的数据,这完全符合您的要求。
我更新的原始答案中的条件顺序是一个错字...上限仍应为<=
,以防没有批次从该确切上限继续。 【参考方案2】:
我现在明白了,我想分享这个简单但有用的解决方案。这种逻辑太混乱了。
代码
$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 帮助我
【讨论】:
以上是关于laravel 检查金额是不是在记录之间的主要内容,如果未能解决你的问题,请参考以下文章
如何检查记录是不是已经存在,然后在 laravel 中更新或插入?
Laravel 5.2 - 检查两个用户之间的对话是不是存在