【问题标题】:WhereBetween not working in laravel 5.2在 Laravel 5.2 中不工作的地方
【发布时间】:2016-11-22 05:09:50
【问题描述】:

我正在使用 laravel 框架,但在此 WhereBetween 中不起作用。我使用的价格范围从 1 到 500 开始。当我设置价格 1-100 时 它为我提供了介于 1 到 100 之间的所有记录,即 20、40、50 等。当我将值从 1 更改为 150 时,将不会显示上述结果,它不会给我任何结果(20、40、50)。谁能帮我 。这是我的代码

enter code here

     $products = Product::with("productimages")
                ->whereBetween('price',[$data['from'], $data['to']])
                 ->get();

注意:- $data['from'] 起始值,即 1 和 $data['to'] 结束值,即 150 或更多

【问题讨论】:

  • 这可能会对您有所帮助:- stackoverflow.com/a/26082523/4248328
  • 你说它在 1 到 100 之间工作,但它不适用于 150 作为最大值?对吗?
  • 如果将值 1 设置为 150,那么代码的输出是什么?
  • 当我将价格设置为 1 到 150 时,它没有给出介于 1 到 100 之间的结果
  • 在这里我发现了问题。问题不在我们的代码中,问题是我采用了数据类型 varchar,所以现在它给出了错误的结果,我现在将其更改为 int,它现在可以正常工作了

标签: php laravel-5.2


【解决方案1】:

我也遇到了同样的问题。当值的数据类型不是整数时,它的行为会非常不可预测。所以解决方案是要么更改列的数据类型,要么在获取时强制转换,如下所示:

$from = $data['from'];
$to = $data['to'];

$products = Product::with("productimages")
    ->whereRaw("CAST(price AS UNSIGNED) BETWEEN ${from} AND ${to}")
    ->get();

我实际上在 PostgreSQL jsonb 数据类型上遇到了这个问题,因为它总是将嵌套值作为字符串返回,并且在提取之间无法正常工作。

【讨论】:

    【解决方案2】:

    使用介于之间的地方

    $projects = Product::where('created_at', '>', $data['from'])
    ->where('created_at', '<', $data['to'])    
    ->get();
    

      $current = Product::with("productimages")
      ->whereBetween('created_at', array($data['from'], $data['to']))->get();
    

           DB::table('Product')->whereBetween('created_at', array($data['from'], $data['to']))->get();
    

    【讨论】:

    • 投了反对票,因为没有解释为什么您的解决方案应该有效。此外,只有第一个示例实际上是不同的。
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多