Symfony4 - 错误:"注意:未定义的索引:dbname"在尝试创建数据库时在AbstractOracleDriver.php中

时间:2018-01-25 13:20:55

标签: php oracle symfony oci8

我正在使用Symfony 4.0.3,我需要连接到Oracle DB。我按照这个说明操作:

https://symfony.com/doc/current/doctrine.html

我的.env文件

DATABASE_URL=oci8://user:pwd@xxx.xxx.xxx.xxx:1521/something

主机地址来自tnsnames.ora - >主机,东西来自tnsnames.ora - > SERVICE_NAME

运行命令后:

php bin/console doctrine:database:create

我收到此错误:

C:\Apache24\htdocs\myapp>
2018-01-25T12:58:47+00:00 [error] Error thrown while running command 
"doctrine:d
atabase:create". Message: "Notice: Undefined index: dbname"

In AbstractOracleDriver.php line 125:

  Notice: Undefined index: dbname

我可以通过普通的PHP连接到DB,但不能通过Symfony连接到DB。 dbname是来自我在.env文件的连接URL的东西。这是从tnsnames.ora。

设置的

4 个答案:

答案 0 :(得分:1)

看起来dbname参数未从您的环境变量/ DBAL网址中获取。

要快速解决此问题,只需使用显式配置而不是URL作为doctrine DBAL的配置。

可以在symfony文档中找到完整的参考配置 -  Doctrine DBAL Reference Configuration

可以找到Doctrine DBAL Oracle配置的文档here

config/packages/doctrine.yaml

doctrine:
  # [..]
  dbal:
    default_connection:   oracle_db_1
    connections:
      oracle_db_1:
        driver:    'oci8' # ... or 'pdo_oci'
        dbname:    '<dbname>'
        host:      '<host>'
        port:      '<port>'
        user:      '<user>'
        password:  '<password>'

如果可行,则用容器参数(即'%env(DATABASE_NAME)%')替换dbname,host,port等,从环境变量中读取并将其添加到.env文件中。

答案 1 :(得分:0)

doctrine.yaml编辑如下:

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): ''

doctrine:
    dbal:
      default_connection:   default
      connections:
        default:
          driver:    'oci8' # ... or 'pdo_oci'
          dbname:    'dbname'
          host:      'xxx.xxx.xxx.xxx'
          port:      '1521'
          user:      'user'
          password:  'pwd'

# With Symfony 3.3, remove the `resolve:` prefix
#         url: '%env(resolve:DATABASE_URL)%' 
orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    mappings:
        App:
            is_bundle: false
            type: annotation
            dir: '%kernel.project_dir%/src/Entity'
            prefix: 'App\Entity'
            alias: App

命令后     php bin / console doctrine:database:create

我有同样的错误。

2018-01-26T06:23:31+00:00 [error] Error thrown while running command            "doctrine:d
atabase:create". Message: "Notice: Undefined index: dbname"

In AbstractOracleDriver.php line 125:

  Notice: Undefined index: dbname

我的dbname与SID项目中SQL Developer中的相同。

答案 2 :(得分:0)

教义/ dbal版本<= 2.8.0中有一个错误。 升级到教义/ dbal版本2.9.0,它应该开始起作用。

这是解决这个问题的github pull请求: https://github.com/doctrine/dbal/pull/3297

答案 3 :(得分:0)

如果使用 SERVICE_NAME 进行连接,则可以这样定义 DATABASE_URL

where to_timestamp(created_on, 'DD-MM-RRRR HH24:MI:SS.FF') >= timestamp '1970-01-01 00:00:00'
and to_timestamp(created_on, 'DD-MM-RRRR HH24:MI:SS.FF') < timestamp '1970-02-01 00:00:00'