나는 다음과 같은 두 개의 테이블이 있습니다1-N의 관계는 doctrine2/symfony2와 (주는 AUTO_INCREMENT 'ID를'입니다)
CREATE TABLE IF NOT EXISTS `skills` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`skill_category` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`skill` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`icon_filename` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`display_priority` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `skill_category` (`skill_category`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `skills_categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`skill_category` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`display_priority` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `IDX_95FF1C8D47E90E27` (`skill_category`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ALTER TABLE `skills`
ADD CONSTRAINT `skills_ibfk_1` FOREIGN KEY (`skill_category`) REFERENCES `skills_categories` (`skill_category`);
참고 둘 사이의 외래 키 관계를 skill_category 열.
나는 이러한 테이블 사이 manytoone/onetomany 관계를 만들려고하고 있습니다. 고유 한 skill_category에는 많은 기술이 있어야합니다.The referenced column name 'skill_category' has to be a primary key column on the target entity class 'Resume\ResumeBundle\Entity\SkillsCategories'.
참조 된 열이 기본 키 교리에 의해 요구 사항이 있습니다 :이 구조는 내가하려고 할 때를 제외하고 잘 작동하고 나는 오류가 매핑을 확인하는 것 같다. 이 키를 기본 키로 만들면 id 열이 더 이상 자동으로 증가하지 않게됩니다. 그래서 mySQL은 외래 키가 기본 키라는 사실로 괜찮은 것 같습니다. 그러나 교리는이 경우에 대해 불평합니다. 누군가 그들은 단지 열을 다시하여 고정 말했다 : 나는이 시도했습니다, 그리고 나를 위해 도움을 보이지 않았다
. 그래서 이것은 어떤 종류의 버그이거나 RDBMS에 대한 근본적인 오해가 있습니다 (완전히 가능함). 내 문제는 내가 'ID'열을 전혀 사용하지 않아야한다는 것입니까? 만약 내가 'skill_category'컬럼이 고유해야만 기본 키를 만들고 'id'컬럼을 제거해야한다고 생각한다면? 그게 내 문제를 해결할 수 있지만 기본 키를 VARCHAR 만들기에 어떤 문제가 있습니까? Google의 대답은 '별로'아닌 것 같지만 다른 사람의 견해에 감사드립니다.
도움을 주셔서 감사합니다. 귀하의 솔루션을 구현했지만 기존 'id'기본 키에 'skillId'를 추가한다는 것을 깨달았습니다. 필자는이 작업을 수행 할 수 있지만 데이터 삽입을 용이하게하기 위해 (필자는 phpmyadmin을 사용하여 삽입하고 싶습니다. 사용하려는 각 카테고리의 해당 ID를 조회하지 않고 차라리 카테고리를 직접 사용하고 엉망으로 만들 필요가 없습니다. ID를 사용하여 테이블을 조인 할 경우 기본 키 (교리 요구 사항) 카테고리가 필요합니다. 그렇게하면 ID가 증가하지 않습니다. 기본 키 (mysql 요구?) – Joe
아, 그래 ... 나는 '스킬'->'카테고리'조인 컬럼 이름이'skillId'가 아닌'categoryId'이어야한다는 의미였습니다. –
수동 데이터베이스 업데이트는 phpMyAdmin에서 할 수 있습니다. INSERT INTO 스킬 (name, iconFilename, displayPriority, categoryId) SELECT "스킬 이름", "아이콘 파일", 5, id FROM 카테고리 선택 WHERE name = "일부 카테고리 이름"? 이것은'INSERT'의 기초로서'SELECT'의 결과를 사용합니다. 데이터 입력을 쉽게하기 위해 모델을 약화시키는 것이 좋은 생각인지 모르겠습니다. –