Php ORM 2原则嵌入和引用
ORM 2.5条令将可嵌入性添加到类中。我想知道的是,以下是否可行,如果可行,如何实现Php ORM 2原则嵌入和引用,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,ORM 2.5条令将可嵌入性添加到类中。我想知道的是,以下是否可行,如果可行,如何实现 <?php /** @Entity */ class User { /** @Embedded(class = "Address") */ private $address; } /** @Embeddable */ class Address { /** @Column(type = "string") */ private $street; ...
<?php
/** @Entity */
class User
{
/** @Embedded(class = "Address") */
private $address;
}
/** @Embeddable */
class Address
{
/** @Column(type = "string") */
private $street;
...
/**
* @ManyToOne(targetEntity="City")
* @JoinColumn(name="city_id", referencedColumnName="id")
**/
private $city;
}
/** @Entity */
class City
{
...
}
如本教程所述:
就您的数据库模式而言,条令将自动将Address类中的所有列内联到User类的表中,就像您在那里直接声明它们一样
发生的情况是,生成的表只有User
和City
。地址
的信息直接合并到用户
表中。对于您的测试用例,这将产生以下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;
}
我建议你发邮件到,他们对此反应很好。你为什么不试试呢?顺便说一句,您可以使用orm:validate schema验证您的实体。这将告诉您您的实体是否正确。嵌入式关联永远不会实现::-(
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);