Выберите запрос между двумя значениями в 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 я не могу указать диапазон, по которому мы должны искать:

$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?

0

Решение

whereBetween требует, чтобы второй элемент массива значений был либо статическим значением, либо переменной, но не столбцом из вашей таблицы. Вы можете использовать два whereRaw заявления (нет whereBetweenRaw эквивалент), который при совместном использовании создаст и and состояние, т.е.

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

DB::raw не будет работать в этом сценарии, и два регулярных where пункты не будут работать.

1

Другие решения

Это странно, вы используете whereBetween() правильно, насколько я знаю. Вы можете попробовать две вещи:

  • закрывать кавычки products.price в массиве
  • Просто используйте два предложения where (> = && <знак равно

Надеюсь это поможет.

0

Скорее всего products.price экранируется как строка. Пытаться DB::raw('products.price'),

0

whereBetween () просто принимает целое число, возможно, ваша переменная является строкой.

0
По вопросам рекламы [email protected]