【问题标题】:Laravel multiple where queries not workingLaravel 多个 where 查询不起作用
【发布时间】:2017-11-26 15:10:11
【问题描述】:

我的以下查询在第二个 where (search_price

$query = Product::where('product_name', '!=', 'product_name');

$likes = DB::table('likes')->selectRaw('product_id, COUNT(*) as count')
                  ->groupBy('product_id')
                  ->orderBy('count', 'desc')
                  ->get();
foreach($likes as $like){
   if($like == $likes[0]){
      $query->where('aw_product_id', $like->product_id');
   }
   else{
      $query->orWhere('aw_product_id', $like->product_id');
   }
}
$query->whereRaw('search_price != rrp_price');
$products = $query->get();

所以,如果我取出 'search_price

我的 where 语句有什么明显错误吗?

【问题讨论】:

  • search_price 在哪里
  • search_price
  • 啊抱歉,应该是 != 我一直在玩 != 和

标签: php mysql laravel-5 eloquent where


【解决方案1】:

原来是因为值是字符串。尽管我将 'search_price' 和 'rrp_price' 转换为浮点数,但实际的 laravel 查询似乎是在比较数据库中的字符串值。

我将数据库中的值修改为浮点数(现在),现在查询可以工作了。

【讨论】:

    【解决方案2】:

    你有没有尝试过其他的 where 语法?像这样:

    ->where('table.search_price', '<>', DB::raw('table.rrp_price'))
    

    或者也许(Laravel 5+):

    ->whereColumn('table.search_price','<>','table.rrp_price')
    

    【讨论】:

    • 它们似乎也不起作用。可能值得一提的是,我将值转换为字符串(因为某些价格包含 GBP 后缀),然后将它们剥离任何货币值,并转换为浮点数。此外,如果我在没有产品 ID 过滤器的情况下在原始问题中运行查询,则价格过滤器会起作用。奇数
    【解决方案3】:

    您的查询有错误修改后的查询如下:

    foreach($likes as $like){
       if($like == $likes[0]){
          $query->where('aw_product_id', $like->product_id);
       }
       else{
          $query->Where('aw_product_id', $like->product_id);
       }
    }
    

    【讨论】:

    • 这使它成为“和在哪里”,而不是“或在哪里”,对吧?查询的那部分有效,但价格过滤器无效。
    【解决方案4】:

    您是否尝试过 &lt;&gt; 而不是 != ?也许它会起作用

    【讨论】:

    • 这是 SQL 的“不等于”运算符。
    • 啊,谢谢,没有任何区别。不过谢谢!
    猜你喜欢
    • 2017-08-03
    • 2016-04-17
    • 2015-03-10
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多