我正在使用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。
设置的答案 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'