2017-07-24 84 views
2

例如,我的数据库结构为:雄辩/ PHP范围(从/至)

+------------+----------+ 
| Range from | Range To | 
+------------+----------+ 
|  100 |  200 | 
|  220 |  250 | 
|  500 |  600 | 
|  620 |  700 | 
+------------+----------+ 

我需要检查人数500的存在,因为有一排500-600这应该返回true。 660也应该返回true,因为有620-700行。

如何有效地查询Eloquent或只能使用原生PHP执行此操作?我想避免使用循环,但我不知道这是可能的。

Thnx提前。

+0

这是什么都与循环做的情况下?首先,你需要一个带WHERE条件的查询来检查你的搜索值是否在from和value之间... – CBroe

回答

0

你可以得到所有存在的范围和计算结果:

$value = 660; 
$rangeExist = ModelName::where('range_from', '<=', $value) 
        ->where('range_to', '>=', $value) 
        ->exists(); 
if ($rangeExist) { 
    // range exist. 
} 

而这个代码将工作即使对于500 :)

+1

你有一个拼写错误:“if(rangeExist)” - >“if($ rangeExist)”。 – tooleks

+0

@tooleks谢谢,回复更新:) – Maraboc

+0

@jjj高兴地帮助:) – Maraboc

1

你可以做这样的事情:

$value = 500; 
$model = Model::where('from', '<', $value)->where('to', '>', $value)->count(); 
if ($model > 0) { 
    // It does exist. 
} 
1

你应该尝试这样的事:

$result = Model::where('range_from', '<=', $value) 
       ->where('range_to', '>=', $value) 
       ->count() > 0; 
+0

这不会起作用,它应该是'range_from <$ value'或'<='(depends关于OP想要什么)。所以,'from'应该小于价值,但不是相反。 –

0

您应该使用简单where条件方法与你RangeModel口才类exists方法调用。

$value = 500; 
$existsInRange = RangeModel::where('from', '<=', value) 
    ->where('to', '>=', $value) 
    ->exists(); 

请注意,count方法会产生性能开销。

UPD:新增=条件。

0

您可以通过简单的where获得记录。

$value = 600; 

$count = DB::table('table_name') 
      ->where('from','<',$value) 
      ->where('to','>',$value) 
      ->count(); 

现在,

if($count==0){ 
    // Out of Range 
}else{ 
    // In range 
} 

希望你能理解。