![](/img/trans.png)
[英]Symfony2 Doctrine2 - generate Many-To-Many annotation from existing database by doctrine:mapping:import
[英]doctrine:mapping:import from existing oracle database not possible
我正在使用带有表“data.account”、“data.users”和“data.service”的 oracle db 12c。 我在这些表上创建了一个具有“选择”权限的单独用户“api”。
然后我创建了一个新的 symfony flex 骨架并添加了进一步的要求:
"require": {
"php": "^7.1.3",
"ext-ctype": "*",
"ext-iconv": "*",
"sensio/framework-extra-bundle": "^5.4",
"sensiolabs/security-checker": "^6.0",
"symfony/apache-pack": "^1.0",
"symfony/cache": "4.3.*",
"symfony/console": "4.3.*",
"symfony/dotenv": "4.3.*",
"symfony/flex": "^1.3.1",
"symfony/framework-bundle": "4.3.*",
"symfony/monolog-bundle": "^3.4",
"symfony/orm-pack": "^1.0",
"symfony/security-core": "4.3.*",
"symfony/twig-bundle": "4.3.*",
"symfony/webpack-encore-bundle": "^1.6",
"symfony/yaml": "4.3.*",
"ext-json": "*"
},
"require-dev": {
"symfony/browser-kit": "4.3.*",
"symfony/css-selector": "4.3.*",
"symfony/debug-pack": "^1.0",
"symfony/maker-bundle": "^1.13",
"symfony/phpunit-bridge": "^4.3",
"symfony/profiler-pack": "^1.0"
},
这是测试数据库连接是否正常工作的最佳时机:
php bin/console doctrine:query:sql "SELECT * FROM data.ACCOUNT FETCH FIRST 1 ROWS ONLY"
太好了,这会返回预期的结果。 现在我应该能够导入这些表并生成实体。 所以我跟着这个帮助页面
所以我试过:
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity -vvv
Database does not have any mapping information.
该死的。 我也试过:
php bin/console doctrine:mapping:convert yml "App\Entity" --from-database --force
[OK] No Metadata Classes to process.
我的学说配置:
doctrine:
dbal:
charset: UTF8
logging: "%kernel.debug%"
profiling: "%kernel.debug%"
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: true
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
.env:
DATABASE_URL=oci8://user:pass@host:1522/dev
我用“php bin/console c:c”删除缓存后重试,甚至删除了整个文件夹,但仍然无法正常工作。
感谢@emix,我们缩小了问题的范围。 清除日志并重试后,我可以看到以下内容:
[2019-08-26 11:23:35] doctrine.DEBUG: SELECT * FROM sys.user_tables [] []
所以现在我知道学说正在尝试从用户那里找到当前拥有的表。 但是 data.ACCOUNT 表位于另一个模式中,并且该表被授予“选择”权限。 该表不归该用户所有。
那么我如何告诉学说查看授予表的另一个模式?
我认为主要的问题是 Oracle 喜欢以大写形式命名表和列。 因此,如果您有一个小写的表,Oracle 会引用它,然后将其命名为“entity”.php 的 ENtity 非常困难!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.