Доктрина Symfony 4 не работает из консоли [2002] Нет такого файла или каталога

Я работаю с Symfony 4, и эта ошибка возникает при запуске команд консоли doctrine:

In AbstractMySQLDriver.php line 108:

An exception occurred in driver: SQLSTATE[HY000] [2002] No such file or directory  

Я думаю, что это связано с тем, что с соединением что-то не так, но когда я запускаю приложение, оно имеет доступ к базе данных без ошибок, поэтому я не могу представить, что не так с соединением.

Я смог продолжить работу, создав вручную базу данных и используя

php bin/console doctrine:schema:create --dump-sql

Но это действительно нежелательно, потому что позже, когда необходимо обновить схему, все данные будут потеряны, потому что мне нужно будет заново создать схему вместо ее обновления.

Приложение работает нормально после выполнения SQL вручную (easyadmin работает нормально).

Вот мои конфигурации:

.env:

DATABASE_URL=mysql://root:root@127.0.0.1:3306/test

doctrine.yaml:

parameters:
     env(DATABASE_URL): ''

doctrine:
    dbal:
       driver: 'pdo_mysql'
       server_version: '5.7'
       charset: utf8mb4

Я попробовал команду drop только для проверки, и она выкинула это:

In DropDatabaseDoctrineCommand.php line 93:


Connection does not contain a 'path' or 'dbname' parameter and cannot be dropped.  

Поэтому я добавил dbname в doctrine.yaml и не работал. Я также попытался удалить кеш, создать новый проект, использовать удаленный MySQL и использовать SQLite, но ошибки одинаковы в обоих случаях!!

Заранее спасибо за помощь!

5 ответов

Пожалуйста измените DB_HOST=localhost в DB_HOST=127.0.0.1

> учение / учение-расслоение

DATABASE_URL=mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}

Мое исправление здесь:

export DATABASE_URL=<value from .env>

И генерация SQL работает:)

Так что я полагаю, что вы показали все содержание вашего doctrine.yml.

Если это так, вы можете подумать об изменении вашего doctrine.yml следующим образом: добавьте дополнительную строку в раздел dbal:

doctrine:
    dbal:
       driver: 'pdo_mysql'
       server_version: '5.7'
       charset: utf8mb4
       url: '%env(resolve:DATABASE_URL)%'

Смотрите последнюю строку, начиная с url:, внимательно.

Оператор 'resol:' ищет DATABASE_URL в ваших переменных env и, если он найден, заменяет выражение его содержимым.

Это doctrine.yml, который автоматически генерируется Symfony.

Однако оператор 'resolv' не требуется. Это может потенциально работать тоже:

doctrine:
    dbal:
       driver: 'pdo_mysql'
       server_version: '5.7'
       charset: utf8mb4
       url: '%env(DATABASE_URL)%'

Этот метод предлагается в документах Symfony, которые могут быть интересны для чтения, чтобы понять дальнейшую настройку Symfony.

Привет, со своей стороны, я добавляю точно такое же поведение, на symfony 4 я просто изменил это

DATABASE_URL=mysql://root:root@localhost:8889/

к этому

DATABASE_URL=mysql://root:root@127.0.0.1:8889

в моем файле.env или.env.dev (в зависимости от env, над которым вы работаете) надеюсь, что это поможет.

Я решил это изменение в.env файле

DATABASE_URL=mysql://root:root@127.0.0.1:3306/test 

в

DATABASE_URL="mysql://root:root@127.0.0.1:3306/test"

Я добавил цитаты. Может быть, вы используете Windows? Меня устраивает.

как в документах Symfony: переменные среды

конфигурации / пакеты /doctrine.yaml

Я решил эту ошибку, добавив URL своей базы данных в файл "config/packages/doctrine.yaml" в поле "параметры" > "env(DATABASE_URL)":

parameters:
     # Adds a fallback DATABASE_URL if the env var is not set.
     # This allows you to run cache:warmup even if your
     # environment variables are not available yet.
     # You should not need to change this value.
     env(DATABASE_URL): 'mysql://your_db_url'
Другие вопросы по тегам