у меня есть таблица с именем столбца firmware_flash_result, который либо не прошел, либо прошел. Конструктор запросов возвращает правильный результат для Pass, но для отказа он возвращает неправильный результат.
Фактический запрос и результат:
SELECT COUNT(DISTINCT `payment_module_id`)
FROM `payment_prod_pograms`
WHERE `created_at` >= "2018-09-17 00:00:00" AND
(
`payment_module_id` LIKE "PB10____18____" OR
`payment_module_id` LIKE "PM10____18____"
) AND
CHAR_LENGTH(`payment_module_id`) = 14 AND
`firmware_flash_result` = "FAIL";
+-------------------------------------+
| COUNT(DISTINCT `payment_module_id`) |
+-------------------------------------+
| 0 |
+-------------------------------------+
Конструктор запросов Laravel:
$payment_prod_failed_test = DB::table('payment_prod_pograms')
->where('created_at','>=','2018-09-17 00:00:00')
->whereRaw('char_length(payment_module_id) = 14')
->where('payment_module_id','like','%PB10____18____%')
->orWhere('payment_module_id','like','%PM10____18____%')
->where('firmware_flash_result','=','FAIL')
->distinct()
->count('payment_module_id');
приведенный выше запрос возвращает результат 453, что невозможно.
После некоторой отладки я обнаружил, что:
->orWhere('payment_module_id','like','%PM10____18____%')
вызывает эту ошибку, почему это?
в базе данных 1515 записей, и все они пройдены, но этот запрос возвращает другой результат. Что я здесь делаю неправильно? Любая помощь будет оценена
orWhere('payment_module_id','like','%PM10____18____%')
, и я думаю, что оно не обернуто()
, как в вашем примере SQL, но вы получаете запрос: - person Lukasz Szozda   schedule 29.09.2018SELECT COUNT(DISTINCT payment_module_id) FROM payment_prod_pograms where created_at > '2018-09-17 00:00:00' AND payment_module_id LIKE '%PB10____18____%' OR payment_module_id LIKE '%PM10____18____%' AND CHAR_LENGTH(payment_module_id) = 14 AND firmware_flash_result = 'FAIL';
в вашей версии ORM отсутствует()
около условия OR плюс отсутствует%
- person Lukasz Szozda   schedule 29.09.2018