2017-01-09 4 views
1

Element이라는 엔티티가 있고, Layout 엔티티에 속할 수 있습니다. 요소와 배치는 ManyToOne 관계를 가지며, 많은 요소는 하나의 Layout에 속합니다.Doctrine ORM 기본값 없음 기존 엔티티

사용되는 databas 엔진은 MySQL이며 추가적으로 layout_id의 일부인 고유 키를 사용합니다. 그래서 우리는 이라고 불리는 열을 (복합 고유 키 때문에) 테이블에 가지고 있으며 기본값은 0입니다. 0의 값은 마법 값이며 코드베이스 전체에 'No Layout assigned'로 처리됩니다.이 때문에 ElementLayout 사이에 FK가 없습니다.

Doctrine ORM의 문제점은 ID가 0 인 레이아웃을로드하려고 시도한다는 것입니다.이 레이아웃은 존재하지 않기 때문에 찾을 수 없습니다. 에 다른 외래 키가 있고 다른 제약 조건이 있기 때문에 ID가 0Layout 항목을 만들 수 없습니다.

이 문제를 해결하는 방법에 대한 제안 사항이 있습니까? 기본적으로 layout_idElement 인 경우 0 일 때 Layout을로드하지 않으려합니다.

답변

1

그런 경우 layout_id을 복합 키의 일부로 설정할 수 없습니다. 이는 외래 키 제약 조건 때문입니다. layout_idnullable (복합 키의 일부가 될 수 없음)을 의미하거나 layout 테이블에 ID 0으로 행을 만들어야합니다 (식별자로 사용할 수 있음).

해결 방법은 복합 키를 사용하지 않고 대신 엔티티 (대리 키)를 고유하게 식별하는 기본 키 열을 추가하는 것입니다.