Laravel возвращает ноль вместо фактического значения ячейки, если параметр передан как целое число - PullRequest
0 голосов
/ 07 мая 2020

У меня есть очень простой запрос из представления MariaDB:

SELECT c.amount, c.discount 
FROM factors_view as c
WHERE c.factor_id = 358

Когда я запускаю этот запрос в Хайди SQL, я получаю такой результат: amount = 16000, discount = 1200

Но в Laravel 5.7 необработанный запрос

$result = \DB::select("
   SELECT c.amount,c.discount 
   FROM factors_view as c
   WHERE c.factor_id = 358"
);

результат: amount = 16000, discount = 0 и когда я помещаю параметр между кавычками:

$result = \DB::select("
   SELECT c.amount,c.discount 
   FROM factors_view as c
   WHERE c.factor_id = '358'"
);

результат: amount = 16000, discount = 1200

Тип c .factor_id - это int(10) unsigned.

Это очень странно для меня; потому что разница заключается в условиях запроса, а не в выборе!

Результатом является та же строка с нулевым значением в столбце c!

Кто-нибудь знаете, что произошло?

это мои журналы запросов для обоих запросов:

1)
query:"select `c`.`amount`, `c`.`discount` from `factors_view` as `c` where `c`.`factor_id` = ?"
bindings:[0:358]

2)
query:"select `c`.`amount`, `c`.`discount` from `factors_view` as `c` where `c`.`factor_id` = ?"
bindings:[0:"358"]

Ответы [ 2 ]

0 голосов
/ 24 мая 2020

Пожалуйста, укажите SHOW CREATE TABLE.

I угадайте , что factor_id равно VARCHAR, тогда как должно быть INT.

int_col = 123     -- can use index
int_col = '123'   -- can use index
char_col = 123    -- 123 dominates; must check all rows, converting char_col to int
char_col = '123'  -- can use index
0 голосов
/ 07 мая 2020

Наконец, я нашел причину этой неприятной ошибки. Чтобы исправить ошибку, я изменил тип factor_id в представлении:

CAST(factor_id AS UNSIGNED) AS factor_id 

И он работает правильно.

Хотя ошибка исправлена, я до сих пор не осознаю этого поведения. Условие where должно влиять на строки, а не на значения ячеек. Это может быть ошибка doctrine / dbal?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...