Я работаю с 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:[email protected]: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, но ошибки одинаковы в обоих случаях !!
Заранее спасибо за помощь !
Так что я полагаю, что вы показали все содержание вашего 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 Docs, что может быть интересно прочитать, чтобы понять дальнейшую конфигурацию Symfony.
Мое исправление здесь:
export DATABASE_URL=<value from .env>
И генерация SQL работает 🙂
Я решил эту ошибку, добавив 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'
Я решил это изменение в .env файле
DATABASE_URL=mysql://root:[email protected]:3306/test
в
DATABASE_URL="mysql://root:[email protected]:3306/test"
Я добавил цитаты. Может быть, вы используете Windows? Меня устраивает.
Пожалуйста измените DB_HOST=localhost
в DB_HOST=127.0.0.1
DATABASE_URL=mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}