![](/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.