2012-05-31 3 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" ])' 

은 테이블을 만들기 : A는 내가로 진행하고있어 방법이있다? 미리 감사드립니다.

답변

2

DBICSL이 관계를 덤프하지 않는 가장 일반적인 이유는 실제로 관계가 있음을 나타냅니다. 데이터베이스에 SHOW CREATE TABLE ingredient이 있으면 실제로 외래 키가 없음을 알 수 있습니다. (표준 SQL로 정의된다)의 참조가 열 사양의 일부로서 정의되는 경우

또한, 이노가 인식되지 않거나 지원 "인라인 REFERENCES 사양"다음 MySQL CREATE TABLE docs 따르면 이는이다. InnoDB는, 별도의 FOREIGN KEY 사양의 일부로서 지정되었을 경우에만, REFERENCES 절을 받아들입니다.

당신이 열 정의에서 REFERENCES를 제거하고 테이블 정의에 를 추가하는 경우는 FK 실제로 MySQL의에서 생성되며, DBICSL는 Recipe-Ingredient에서 belongs_to 관계 Recipe에서 has_many 관계를 만듭니다 Ingredient.

관련 문제