2012-06-29 80 views
4

我想從我的symfony應用程序數據庫生成實體類。 所以我跟着以下三個步驟(從How to generate Entities from an Existing Database差轉換和學說:​​映射:進口

1. php app/console doctrine:mapping:convert yml ./src/Acme/BlogBundle/Resources/config/doctrine/metadata/orm --from-database --force 

2. php app/console doctrine:mapping:import AcmeBlogBundle yml 

3. php app/console doctrine:generate:entities AcmeBlogBundle 

爲了瞭解這三個命令的工作,我剛剛從./src/Acme/BlogBu​​ndle/Resources/config/doctrine/metadata刪除所有文件/ orm。我在一個表中增加了一個字段。之後,我遵循命令2和命令3。

我檢查了修改表的實體的新領域。新領域出現在實體中。

那麼爲什麼我們應該使用原則:映射:轉換命令以便從現有數據庫中生成實體?

+3

我覺得Symfony沒有很好的社區支持。 –

+0

我沒有得到很好的解釋。爲了減少分數,我正在向他們試圖澄清我的人們提出要點。 –

回答

2

一旦生成實體類,教義是足夠的智能,讓所有需要從實體類導入映射,不需要在你的第一個步驟中獲得的類的元數據信息。如果你刪除了元數據和實體類,那麼你將無法運行第2步而不運行第1步。

+0

我通過去除「MyBundle /實體/」和「MyBundle /資源/配置/教義/」和執行試過步驟-2和步驟3。成功生成類。我沒有使用步驟1。 –

3

我所知道的,正如我在this post,中解釋的那樣:映射:convert不能解析名稱空間爲您的模型關係。這就是爲什麼你需要處理映射:導入並獲取最終的映射文件。映射後:導入已經處理完畢,可以刪除YourBundle/Resources/config/doctrine/metadata/orm目錄。

+0

這是真的。映射:convert不解析名稱空間和映射:import does。就我的觀察而言,這是唯一的區別。但是我嘗試了第二步和第三步而沒有運行第一步,它正在生成沒有任何錯誤的實體。我認爲步驟1和步驟2是獨立的。因爲在第1步中,我們給出了路徑信息,但是我們沒有提到步驟2中的路徑。然後,步驟2如何知道步驟1生成的文件的位置? –

+0

您是否嘗試過使用具有外鍵的模式?我認爲這是沒有第一步就行不通的情況,關係不完全合格。 – AlterPHP

+0

該表具有外鍵... –

6

我不太明白你們在說什麼吧,因爲我需要和他們之間不同的3個命令。

如果要反思一個DB模式來生成所需的symfony的ORM文件和實體,那麼你必須使用3個命令。

這裏是他們做了什麼: 1)

php app/console doctrine:mapping:convert yml ./src/< vendor>/< bundle_name>/Resources/config/doctrine/metadata/orm --from-database --force 

這由introspection.For每個表建立從數據庫實體映射文件的數據庫,這將僅僅產生<實體> .orm.yml在:

< proj_folder>/src/< vendor>/< bundle_name>/Resources/config/doctrine/metadata/orm/< entity>.orm.yml 

2)

php app/console doctrine:mapping:import < vendor>< bundle_name> annotation** 

生成entit ÿ類爲每個表從DB內省:

OUTPUT:writing /var/www/html/< project_folder>/src/< vendor>/< bundle_name>/Entity/< entity>.php

3)

php app/console doctrine:generate:entities < vendor>< nameBundle>** 

這僅產生用於所有實體類屬性getter和setter。