搜索完整後,我決定向Symfony2中的映射轉換器實現展示我的問題。首先,我告訴你我的設置:Symfony2/Doctrine/Mapping轉換器/關係/ PK奇怪行爲
有關係的用戶表:
-- -----------------------------------------------------
-- Table `event_manager`.`user`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `event_manager`.`user` ;
CREATE TABLE IF NOT EXISTS `event_manager`.`user` (
`id` INT NOT NULL AUTO_INCREMENT ,
`email` VARCHAR(255) NULL ,
`salt` VARCHAR(255) NULL ,
`password` VARCHAR(255) NULL ,
`logged_in` TINYINT(1) NULL ,
`status` ENUM('active', 'inactive', 'deleted') NULL ,
PRIMARY KEY (`id`) ,
CONSTRAINT `fk_user_user_data1`
FOREIGN KEY (`id`)
REFERENCES `event_manager`.`user_data` (`user_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `event_manager`.`user_data`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `event_manager`.`user_data` ;
CREATE TABLE IF NOT EXISTS `event_manager`.`user_data` (
`user_id` INT NOT NULL ,
`image_id` INT NULL ,
`gender` ENUM('male','female') NULL ,
`first_name` VARCHAR(255) NULL ,
`last_name` VARCHAR(255) NULL ,
`address` VARCHAR(255) NULL ,
`zip` VARCHAR(255) NULL ,
`city` VARCHAR(255) NULL ,
`phone_private` VARCHAR(255) NULL ,
`phone_mobile` VARCHAR(255) NULL ,
`phone_work` VARCHAR(255) NULL ,
`user_datacol` VARCHAR(45) NULL ,
PRIMARY KEY (`user_id`) ,
CONSTRAINT `fk_user_data_image1`
FOREIGN KEY (`image_id`)
REFERENCES `event_manager`.`image` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE INDEX `fk_user_data_image1_idx` ON `event_manager`.`user_data` (`image_id` ASC) ;
隨着可在我的數據庫,我使用的學說轉換器使用此命令:
php app/console doctrine:mapping:convert yml ./src/path-to-bundle/Resources/config/doctrine --from-database --force --filter=User
然後我在用戶YAML上得到這個結果:
User:
type: entity
table: user
fields:
email:
type: string
length: 255
fixed: false
nullable: true
salt:
type: string
length: 255
fixed: false
nullable: true
password:
type: string
length: 255
fixed: false
nullable: true
loggedIn:
type: boolean
nullable: true
column: logged_in
status:
type: string
length: null
fixed: false
nullable: true
manyToMany:
userGroup:
targetEntity: UserGroup
cascade: { }
mappedBy: null
inversedBy: user
joinTable:
name: user_has_user_group
joinColumns:
-
name: user_id
referencedColumnName: id
inverseJoinColumns:
-
name: user_group_id
referencedColumnName: id
orderBy: null
oneToOne:
id:
targetEntity: UserData
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
id:
referencedColumnName: user_id
orphanRemoval: false
lifecycleCallbacks: { }
正如您所看到的,doctrine將「id」列作爲主要鍵並使用它,而不是作爲名稱的關係,這使我終於到了實體的方法是這樣的:
/**
* Set id
*
* @param \Parella\EventManagerBundle\Entity\UserData $id
* @return User
*/
public function setId(\Parella\EventManagerBundle\Entity\UserData $id = null)
{
$this->id = $id;
return $this;
}
/**
* Get id
*
* @return \Parella\EventManagerBundle\Entity\UserData
*/
public function getId()
{
return $this->id;
}
這當然完全不是我想要的,我從經常在創造大量的entites一次數據庫,所以手動修復這不是一個真正的選擇。不幸的是,我不知道我是否會導致問題或教條。我想念什麼?
感謝您的回覆。
有趣。學說可能不支持單一列既是主要的id也是不支持參與擁有的關係。即使這樣做,我認爲它可能會有點嘗試保持id同步。給用戶添加一個user_data_id列,並在其上放置關係。並且增加int值是一個小的價格,特別是如果你最終得到更多的關係。如果你真的想保持user_data_id同步,那麼你可以。 – Cerad