Laravel或其他用途

时间:2016-07-07 18:35:21

标签: laravel eloquent

我有以下查询:

$foundItem = ItemDrop::where('zone_id',$this->user->zone_id)
        ->where('find_rate','>=',$itemChance)
        ->orderBy('find_rate','desc')
        ->take(1);

在我的数据库中,如果我希望所有区域中的ItemDrop可用,我会设置zone_id =“ - 1”。

所以我一直在考虑如何将它添加到我的查询中..

$foundItem = ItemDrop::where('zone_id',$this->user->zone_id)
        ->orWhere('zone_id',"-1")
        ->where('find_rate','>=',$itemChance)
        ->orderBy('find_rate','desc')
        ->take(1);

但它感觉不对,可能无法正常工作,因为我有2个Wheres,OrWhere只应包含在第一个地方:where('zone_id',$this->user->zone_id)

如何使用zone_id -1和$this->user->zone_id获取ItemDrop的所有记录?

没有Laravel我的DESIRED查询会是什么样子:

SELECT * FROM ItemDrops WHERE( zone_id = "-1" || zone_id = $this->user->zone_id) && find_rate >= $itemChance

2 个答案:

答案 0 :(得分:0)

您可以在或在哪里使用匿名函数来执行此操作。尝试这样的事情:

$foundItem = ItemDrop::where('zone_id',$this->user->zone_id) 
                     ->orWhere( function ($query) { 
                         $query->where('zone_id',"-1"); 
                     })
                     ->orderBy('find_rate','desc')
                     ->take(1);

希望它有所帮助...

答案 1 :(得分:0)

试试这个:

$foundItem = ItemDrop::where(function($query){
   $query->where('zone_id',$this->user->zone_id)
         ->orWhere('zone_id',"-1");
 })->where('find_rate','>=',$itemChance)
 ->orderBy('find_rate','desc') ->take(1);