2011-08-31 69 views
1

我使用Sympelon 1.4和Propel。我刪除了一個表(名稱:company_show_field),也從數據庫和schema.yml中刪除。然後我添加了一個名爲agency_company的新表(它也存在於DB中)。所以,我現在有這樣的:Symfony 1.4,Propel,build-forms使用老yaml?

 
    company: 
    _attributes: { phpName: EdimaCompany } 
    id: { type: INTEGER, size: '11', autoIncrement: true, required: true } 
    name: { type: VARCHAR, size: '100', required: true } 
    ... 

    agency_company: 
    _attributes: { phpName: EdimaAgencyCompany } 
    _propel_behaviors: 
     symfony: 
     form: false 
     filter: false 
    agency_id: { type: INTEGER, size: '11', required: true, primaryKey: true, foreignTable: company, foreignReference: id, onDelete: CASCADE } 
    company_id: { type: INTEGER, size: '11', required: true, primaryKey: true, foreignTable: company, foreignReference: id, onDelete: CASCADE } 

然後我做:

 
symfony cc 
symfony propel:build-model 
symfony propel:build-forms 

但BaseEdimaCompanyForm類拋出一個異常: 「調用未定義的方法BaseEdimaCompany :: getEdimaCompanyShowFields」。我從這個文件中刪除了一些行(爲了測試這個代碼是新建一個文件),並且再次重新生成模型/表單,但是symfony再次生成了一個錯誤的代碼。

我確定這個表(company_show_fields)在模式和數據庫中不存在。而且我沒有看到這個表單類(agency_company)中的新表。

有人可以幫助我嗎?爲什麼會發生? symfony在哪裏得到表名,什麼不存在?

PS:對不起,我的英文,這不是我的母語。

+0

我不明白髮生了什麼,但我刪除了模型/地圖/ EdimaCompanyShowFieldsTableMap.php,現在可以使用。 對不起,您的時間! – gopher

回答

0

它更容易使用symfony propel:build --all比只使用build-modelbuild-forms當你在你的模型的變化,因爲它會產生所有相關的方案(例如模型,過濾器,表單,數據庫等)。

另外,您不需要手動刪除真實數據庫中的表格,當您使用build --all幫助程序時,symfony會爲您做到這一點。如果要從方案中刪除表格,只需刪除方案文件中的表格代碼,然後刪除/ lib文件夾內的過濾器,表格和模型文件夾中的所有相關文件。該方法將保持ORM與真實數據庫之間的連接。

+0

謝謝,但我無法使用--all選項,因爲刪除了所有表格(包含數據),而且我需要它們。 – gopher