我正在开发一个小项目,以便学习使用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" ])'
我做错了什么? 提前谢谢。
答案 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
关系从Ingredient
到Recipe
的{{1}}到has_many
和Recipe
关系。