mysql баг

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
sergei_beatngo
Сообщения: 2
Зарегистрирован: 2020.07.13, 15:29

mysql баг

Сообщение sergei_beatngo »

Не уверен чем именно вызвана ошибка (возможно моими действиями), но подозреваю что после обновления на локальной машине пакета mysql 8.0. На postgresql код работает.

Код: Выделить всё

2020-07-13 15:37:53 [127.0.0.1][-][-][error][yii\base\ErrorException:8] yii\base\ErrorException: Undefined index: constraint_name in /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/mysql/Schema.php:394
Stack trace:
#0 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/mysql/Schema.php(394): yii\base\ErrorHandler->handleError(8, 'Undefined index...', '/home/sergedk/w...', 394, Array)
#1 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/mysql/Schema.php(126): yii\db\mysql\Schema->findConstraints(Object(yii\db\TableSchema))
#2 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/Schema.php(757): yii\db\mysql\Schema->loadTableSchema('client_confirma...')
#3 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/Schema.php(193): yii\db\Schema->getTableMetadata('client_confirma...', 'schema', false)
#4 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/ActiveRecord.php(435): yii\db\Schema->getTableSchema('client_confirma...')
#5 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/ActiveRecord.php(509): yii\db\ActiveRecord::getTableSchema()
#6 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/ActiveQueryTrait.php(123): yii\db\ActiveRecord::populateRecord(Object(common\models\client\ClientConfirmation), Array)
#7 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/ActiveQuery.php(219): yii\db\ActiveQuery->createModels(Array)
#8 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/db/ActiveQuery.php(306): yii\db\ActiveQuery->populate(Array)
#9 /home/sergedk/www/intelcon/common/models/client/queries/ClientConfirmationQuery.php(50): yii\db\ActiveQuery->one(NULL)
#10 /home/sergedk/www/intelcon/common/models/client/forms/LoginForm.php(99): common\models\client\queries\ClientConfirmationQuery->one()
#11 /home/sergedk/www/intelcon/common/models/client/forms/LoginForm.php(53): common\models\client\forms\LoginForm->findConfirmation()
#12 /home/sergedk/www/intelcon/client-api/controllers/AuthController.php(14): common\models\client\forms\LoginForm->login()
#13 [internal function]: clientApi\controllers\AuthController->actionLogin()
#14 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#15 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/base/Controller.php(180): yii\base\InlineAction->runWithParams(Array)
#16 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction('login', Array)
#17 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction('auth/login', Array)
#18 /home/sergedk/www/intelcon/vendor/yiisoft/yii2/base/Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#19 /home/sergedk/www/intelcon/client-api/web/index.php(17): yii\base\Application->run()
#20 {main}
kubuntu 19.10
Последний раз редактировалось sergei_beatngo 2020.07.14, 11:29, всего редактировалось 3 раза.

Аватара пользователя
samdark
Администратор
Сообщения: 9361
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: mysql баг

Сообщение samdark »

Что за ошибка?

Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: mysql баг

Сообщение Loveorigami »

Миграции накатили в новой базе? + Очистите кеш.

Аватара пользователя
tugrik
Сообщения: 26
Зарегистрирован: 2016.03.11, 17:07

Re: mysql баг

Сообщение tugrik »

Ошибка в
db/mysql/Schema.php
Так как в новых версиях MYSQL, запрос вида:
$sql = <<<'SQL'
SELECT
kcu.constraint_name,
kcu.column_name,
kcu.referenced_table_name,
kcu.referenced_column_name
FROM information_schema.referential_constraints AS rc
JOIN information_schema.key_column_usage AS kcu ON
(
kcu.constraint_catalog = rc.constraint_catalog OR
(kcu.constraint_catalog IS NULL AND rc.constraint_catalog IS NULL)
) AND
kcu.constraint_schema = rc.constraint_schema AND
kcu.constraint_name = rc.constraint_name
WHERE rc.constraint_schema = database() AND kcu.table_schema = database()
AND rc.table_name = :tableName AND kcu.table_name = :tableName1
SQL;
Вернёт массив с ключами в апперкейсе:

Код: Выделить всё

 ["CONSTRAINT_NAME"]=>
а в коде ожидается в ловвер кейсе:

Код: Выделить всё

$constraints[$row['constraint_name']]['referenced_table_name'] = $row['referenced_table_name'];
Вы можете временно в вендоре , в запросе изменить, c:

Код: Выделить всё

 kcu.constraint_name,
    kcu.column_name,
    kcu.referenced_table_name,
    kcu.referenced_column_name
На

Код: Выделить всё

 kcu.constraint_name as constraint_name,
    kcu.column_name as column_name,
    kcu.referenced_table_name as referenced_table_name,
    kcu.referenced_column_name as referenced_column_name
Возможно стоит сделать пуллреквест в yii2/db/mysql/Shema.php =)
или же его сделаю я, вечером =)

Аватара пользователя
tugrik
Сообщения: 26
Зарегистрирован: 2016.03.11, 17:07

Re: mysql баг

Сообщение tugrik »


sergei_beatngo
Сообщения: 2
Зарегистрирован: 2020.07.13, 15:29

Re: mysql баг

Сообщение sergei_beatngo »

спасибо за отклик

Ответить