由於本教程中指出:
在你的數據庫架構方面,學說將自動內聯從Address類爲用戶類的表中的所有列,就好像你已經宣佈他們直接出現。
發生的情況是,生成的唯一表格是User
和City
。 Address
的信息直接合併到User
表中。對於測試的情況下,這將導致以下SQL:
CREATE TABLE User (id INT AUTO_INCREMENT NOT NULL, address_street VARCHAR(255) NOT NULL, address_postalCode VARCHAR(255) NOT NULL, address_country VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE City (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
正如你可以看到,相對於城市是完全丟失,因爲此功能目前未實現(還)。現在,你需要保持的關係出了嵌入部分的:
<?php
/** @Entity */
class User {
/**
* @Column(type="integer")
* @GeneratedValue
* @Id()
*/
protected $id;
/** @Embedded(class = "Address") */
private $address;
/** @ManyToOne(targetEntity="City") */
private $city;
}
這生成的表,你可能會想到他們,包括關係到城市:
CREATE TABLE User (id INT AUTO_INCREMENT NOT NULL, city_id INT DEFAULT NULL, address_street VARCHAR(255) NOT NULL, address_postalCode VARCHAR(255) NOT NULL, address_country VARCHAR(255) NOT NULL, INDEX IDX_E0C1DE1C8BAC62AF (city_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE City (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE User ADD CONSTRAINT FK_E0C1DE1C8BAC62AF FOREIGN KEY (city_id) REFERENCES City (id);
我建議您發佈到doctrine-user mailing list,他們對similar questions的響應非常好。
你爲什麼不嘗試一下?順便說一句,你可以驗證你的實體與教條orm:validate-schema這將告訴你,如果你的實體是正確的。 – tom 2014-10-06 13:24:45