DBIx :: Class :: Schema :: Loader:make_schema_at找不到任何关系

时间:2012-05-31 22:07:22

标签: database perl orm relational-database dbix-class

我正在开发一个小项目,以便学习使用DBIx :: Class和 我正在尝试使用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" ])'

我做错了什么? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

DBICSL不转储您的关系的最常见原因是您实际上没有关系。如果您在数据库中SHOW CREATE TABLE ingredient,您将看到实际上没有外键。根据{{​​3}},这是因为:

  

此外,InnoDB无法识别或支持“内联参考规范”(如SQL标准中所定义),其中引用被定义为列规范的一部分。仅当指定为单独的FOREIGN KEY规范的一部分时,InnoDB才接受REFERENCES子句。

如果从列定义中删除REFERENCES并将FOREIGN KEY (recipe_id) REFERENCES recipe(id)添加到表定义中,则实际上将在MySQL中创建FK,并且DBICSL将从{创建belongs_to关系从IngredientRecipe的{​​{1}}到has_manyRecipe关系。