Я использую Symfony и обновляюсь до 3.4.11.
Но у меня большая проблема. Когда я запускаю команду:
php bin/console doctrine:schema:update --dump-sql
в терминале у меня следующая ошибка:
In ClassMetadataInfo.php line 1400:
Notice: Uninitialized string offset: 0
На самом деле, я искал и читал документы, и я не нашел ошибки.
Огромное спасибо
ОБНОВИТЬ
$ php bin/console doc:sch:va -vvv
Mapping
-------
In ClassMetadataInfo.php line 1400:
[Symfony\Component\Debug\Exception\ContextErrorException]
Notice: Uninitialized string offset: 0
Exception trace:
Doctrine\ORM\Mapping\ClassMetadataInfo->_validateAndCompleteFieldMapping() at /home/devel/tests4/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php:2355
Doctrine\ORM\Mapping\ClassMetadataInfo->mapField() at /home/devel/tests4/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php:333
Doctrine\ORM\Mapping\Driver\AnnotationDriver->loadMetadataForClass() at /home/devel/tests4/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php:102
Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain->loadMetadataForClass() at /home/devel/tests4/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:151
Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata() at /home/devel/tests4/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:333
Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata() at /home/devel/tests4/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78
Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata() at /home/devel/tests4/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:217
Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor() at /home/devel/tests4/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:115
Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getAllMetadata() at /home/devel/tests4/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/SchemaValidator.php:68
Doctrine\ORM\Tools\SchemaValidator->validateMapping() at /home/devel/tests4/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php:69
Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand->execute() at /home/devel/tests4/vendor/doctrine/doctrine-bundle/Command/Proxy/ValidateSchemaCommand.php:34
Doctrine\Bundle\DoctrineBundle\Command\Proxy\ValidateSchemaCommand->execute() at /home/devel/tests4/vendor/symfony/console/Command/Command.php:251
Symfony\Component\Console\Command\Command->run() at /home/devel/tests4/vendor/symfony/console/Application.php:964
Symfony\Component\Console\Application->doRunCommand() at /home/devel/tests4/vendor/symfony/framework-bundle/Console/Application.php:86
Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /home/devel/tests4/vendor/symfony/console/Application.php:248
Symfony\Component\Console\Application->doRun() at /home/devel/tests4/vendor/symfony/framework-bundle/Console/Application.php:74
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /home/devel/tests4/vendor/symfony/console/Application.php:148
Symfony\Component\Console\Application->run() at /home/devel/tests4/bin/console:39
Ничего, та же мэппинг.
Вы можете использовать php bin / console doctrine: схема: проверка для проверки схемы
Также вы можете использовать php bin / console doctrine: schema: update --dump-sql -vvv, чтобы иметь больше отладочной информации и получать больше информации от того, где она вызывается. Иногда дает хорошую информацию, где искать.
Добавьте ответ в другой вопрос, потому что в нем больше 2600 символов :)
Да, я использовал php bin / console doctrine: схема: проверка, но получаю ту же ошибку






Спасибо всем за попытку мне помочь.
Я исправил свою ошибку и нашел здесь правильный ответ: https://plus.google.com/+KamilZabdyr/posts/fb5xYGyyyY8
Вот быстрое исправление очень распространенной ошибки с ORM:
Примечание PHP: смещение неинициализированной строки: 0 в? /Vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php
Обычно это происходит из-за того, что тег имени столбца ORM пуст. Поэтому проверьте все файлы вашей модели на наличие пустого имени. Например:
@ORM \ Column (name = "", type = "строка", длина = 12)
Это первое обращение Google по моей подобной проблеме:
bin/console doctrine:migrations:diff In MySqlSchemaManager.php line 243: Notice: Uninitialized string offset: 0
Когда я проверил код на других машинах, он работал, но на этой конкретной машине произошел вышеуказанный сбой. Моя проблема заключалась в некотором взаимодействии с MariaDB. Когда я обновился с:
mysql --version mysql Ver 15.1 Distrib 10.1.34-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
К:
mysql --version mysql Ver 15.1 Distrib 10.3.11-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Проблема ушла.
Обновление до 10.1.38-MariaDB не помогло.
Я также испытал «Смещение неинициализированной строки: 0» с доктриной из консоли Symfony.
In MySqlSchemaManager.php line 223:
Notice: Uninitialized string offset: 0
В моем случае это было несоответствие версии MariaDB между конфигурацией доктрины и (локальной) версией сервера. Я увидел предложение @Samuel Åslund обновить MariaDB и обнаружил, что это немного чрезмерно, но оно указывало мне на проблему с версией базы данных.
В doctrine.yaml (Symfony 4+)
doctrine:
dbal:
server_version: 'mariadb-10.1.36'
После установки через symfony-console он был предварительно настроен с помощью:
doctrine:
dbal:
server_version: 'mariadb-10.3.11'
Для записи у меня была такая же проблема при создании документа с помощью swagger, она была в аннотации функции установки в entity:
/**
* @param Survey[]|[] $surveys
*/
public function setSurvey(array $surveys = [])
{
$this->surveys = $surveys;
}
неправильно, когда
/**
* @param Survey[] $surveys
*/
public function setSurvey(array $surveys)
{
$this->surveys = $surveys;
}
верно.
Аннотация потенциального пустого массива в качестве аргумента вызывает ошибку (и я думаю, это также плохая практика, функция-установщик не может иметь аргумента!).
Я полагаю, вы могли бы попробовать удалить каталог кеша. Полагаю, до обновления все работало нормально? Вы не изменили никакой информации о картировании Doctrine.