2014-11-03 209 views
0

我试图用Laravel和查询构建器来提高产品价格在1和最大产品价格之间的数量。在Laravel中的两个值之间选择查询

我试图与此查询在phpMyAdmin,它返回一个结果:

SELECT product_id ,  count(user_id) , sum(monies) 
    FROM products, prices 
    WHERE monies 
    BETWEEN '20' 
    AND products.price 

    AND products.id = 101 
    GROUP BY (product_id); 

但在PHP我coudn't指定上,我们必须搜索范围:

$data = Product::join('prices', 'prices.product_id', '=', 'products.id') 
       ->select(DB::raw('count(user_id) as nombre'),DB::raw('sum(monies) as sum')) 
       ->where('prices.project_id', '=', '101') 
       ->whereBetween('monies', array(1, 'products.price')) 
       ->groupBy('prices.product_id') 
       ->get(); 

但我总是得到一个空的结果,当我改变whereBetween('monies', array(1, 'products.price'))whereBetween('monies', array(1, 1000))它返回一个结果。

如何使用whereBetween

回答

1

whereBetween要求values数组的第二个元素是静态值或变量,但不是表中的列。您可以使用两个whereRaw语句(没有whereBetweenRaw当量),其中,一起使用时,将创建和and条件,即:

->whereRaw('monies >= 1')->whereRaw('monies <= products.price') 

DB::raw不会在这种情况下工作,两个常规where条款拿下也不行。

0

这很奇怪,你正在使用whereBetween()据我所知。有两两件事你可以尝试:

  • 引文结束products.price数组中
  • 只需使用两个where子句(> = & & < =)

希望这有助于。

+0

该问题与whereBetween子句中与where'Between之间使用'products.price'相关的地方无关。 – 2014-11-03 16:46:29

0

机会是products.price被作为字符串转义。尝试DB::raw('products.price')

+0

它不能与'DB :: raw('products.price')一起使用' – 2014-11-03 16:47:32

+0

查看它通过执行'toSql()'而不是'get()'生成的查询。 – ceejayoz 2014-11-03 17:58:59

0

whereBetween()只接受整数可能你的变量是字符串。