Я пытаюсь извлечь номер продукта, который оценивается между 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 я не могу указать диапазон, по которому мы должны искать:
$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
?
whereBetween
требует, чтобы второй элемент массива значений был либо статическим значением, либо переменной, но не столбцом из вашей таблицы. Вы можете использовать два whereRaw
заявления (нет whereBetweenRaw
эквивалент), который при совместном использовании создаст и and
состояние, т.е.
->whereRaw('monies >= 1')->whereRaw('monies <= products.price')
DB::raw
не будет работать в этом сценарии, и два регулярных where
пункты не будут работать.
Это странно, вы используете whereBetween()
правильно, насколько я знаю. Вы можете попробовать две вещи:
products.price
в массивеНадеюсь это поможет.
Скорее всего products.price
экранируется как строка. Пытаться DB::raw('products.price')
,
whereBetween () просто принимает целое число, возможно, ваша переменная является строкой.