我有以下查询:
$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
答案 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);