2012-05-31 60 views
1

我正在研究一個小項目,以學習如何使用DBIx :: Class和 我試圖使用DBIx :: Class :: Schema :: Loader從數據庫中獲取架構代碼。 make_schema_at工具創建模式,但不在類之間插入任何關係。 有一個如何我過程使用: 創建表:DBIx :: Class :: Schema :: Loader:make_schema_at沒有找到任何關係

CREATE TABLE recipe (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    name varchar(255) NOT NULL, 
    description TEXT NOT NULL 
) 
ENGINE InnoDB, CHARACTER SET utf8; 

CREATE TABLE ingredient(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    recipe_id INT NOT NULL REFERENCES recipe(id), 
    name TEXT NOT NULL, 
    quantity INT NOT NULL 
) 
ENGINE InnoDB, CHARACTER SET utf8; 

然後:

perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib -e 'make_schema_at("Recipes::Schema", { debug => 1 }, [ "dbi:mysql:dbname=recipes","user", "pass" ])' 

我做錯了嗎? 在此先感謝。

回答

2

DBICSL不會拋棄你的關係的最常見原因是你實際上並沒有的關係。如果您在數據庫中使用SHOW CREATE TABLE ingredient,則會看到實際上不存在外鍵。根據MySQL CREATE TABLE docs這是因爲:

此外,InnoDB的不能識別或支持「內聯參考Specifications」(如在SQL標準中定義的),其中的參考文獻中被定義爲列說明書的一部分。 InnoDB只有在作爲單獨的FOREIGN KEY規範的一部分指定時才接受REFERENCES子句。

如果從列定義中刪除REFERENCES並添加表定義,FK實際上將在MySQL創建,DBICSL將創建一個從IngredientRecipe一個belongs_to關係,並從Recipehas_many關係Ingredient

相關問題