【问题标题】:Laravel orWhere usageLaravel or Where 用法
【发布时间】:2016-07-07 18:35:21
【问题描述】:

我有以下疑问:

$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 中:where('zone_id',$this->user->zone_id)

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

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

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

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    试试这个:

    $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);
    

    【讨论】:

      【解决方案2】:

      您可以在 orWhere 中使用匿名函数来执行此操作。试试这样的:

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

      希望对你有帮助...

      【讨论】:

      • 我不明白为什么,但我得到了{"error":{"message":"syntax error, unexpected '}'","code":4,"status_code":500}}
      • 好吧,我的错,我没有检查代码。使用此编辑后的代码重试。
      • 刚刚试过这个,它不能正常工作——它总是找到带有“-1”zone_id的项目,不管find_rate
      • 可能是take(1)的原因,不用它试试。
      • 不需要!通过将 orWHere 方法中的第一个 Where 更改为 Where 来修复它。最终结果如下所示:` $itemChance = mt_rand(1,1000); $foundItem = ItemDrop::where('zone_id',$this->user->zone_id) ->orWhere( function ($query) { $query->where('zone_id',"-1"); })`
      猜你喜欢
      • 2014-06-28
      • 2020-11-28
      • 2013-06-04
      • 1970-01-01
      • 2018-01-03
      • 2014-12-08
      相关资源
      最近更新 更多