Примечание доктрины Symfony 3.4.11: смещение неинициализированной строки: 0

Я использую 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

Я полагаю, вы могли бы попробовать удалить каталог кеша. Полагаю, до обновления все работало нормально? Вы не изменили никакой информации о картировании Doctrine.

Cerad 12.06.2018 01:39

Ничего, та же мэппинг.

gabrielrincon 12.06.2018 01:53

Вы можете использовать php bin / console doctrine: схема: проверка для проверки схемы

user2182349 12.06.2018 03:53

Также вы можете использовать php bin / console doctrine: schema: update --dump-sql -vvv, чтобы иметь больше отладочной информации и получать больше информации от того, где она вызывается. Иногда дает хорошую информацию, где искать.

M. Kebza 12.06.2018 04:01

Добавьте ответ в другой вопрос, потому что в нем больше 2600 символов :)

gabrielrincon 12.06.2018 13:09

Да, я использовал php bin / console doctrine: схема: проверка, но получаю ту же ошибку

gabrielrincon 12.06.2018 13:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
6
1 115
4

Ответы 4

Спасибо всем за попытку мне помочь.

Я исправил свою ошибку и нашел здесь правильный ответ: 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;
    }

верно.

Аннотация потенциального пустого массива в качестве аргумента вызывает ошибку (и я думаю, это также плохая практика, функция-установщик не может иметь аргумента!).

Другие вопросы по теме