Symfony中的学说:在关键部分的三元关系中不可能为空



在我的架构中,我在用户、机构和会话实体之间有一个三元关系。

我可以理解"常规"表键(简单 Id(不能为空,但我希望拥有(用户 ID、机构 ID、NULL(或(空、机构、会话 ID(,甚至(空、空、会话(...... 三元关系是不可能的还是我错过了一些注释标记?

我不想"人为地"将此三元更改为具有主 id 键的常规实体,并将这 3 个元素作为外键。 感谢您的任何帮助。 我还调整了设置器以接受这些元素的空值。

/**
* @ORMTable(name="institutioncontactsessionorganization")
* @ORMEntity(repositoryClass="MyBundleRepositoryInstitutionContactSessionOrganizationRepository")
* @UniqueEntity(
*     fields={"icsoInstitution", "icsoSession", "icsoUser"},
*     errorPath="departmentName",
*     message="this association already exists"
* )
*/
class InstitutionContactSessionOrganization
{
/**
* @ORMId
* @ORMManyToOne(targetEntity="MyBundleEntityInstitution", inversedBy="icsos")
* @ORMJoinColumn(name="institutionId", referencedColumnName="id", nullable=true)
*/
private $icsoInstitution;
/**
* @ORMId
* @ORMManyToOne(targetEntity="MyBundleEntitySession", inversedBy="icsos")
* @ORMJoinColumns({
*   @ORMJoinColumn(name="sessionId", referencedColumnName="id", nullable=true)
* })
*/
private $icsoSession;
/**
* @ORMId
* @ORMManyToOne(targetEntity="MyBundleEntityUser", inversedBy="icsos")
* @ORMJoinColumns({
*   @ORMJoinColumn(name="userId", referencedColumnName="id", nullable=true)
* })
*/
private $icsoUser;
...
}

当我使用命令创建表时,不考虑可为空的属性

CREATE TABLE institutioncontactsessionorganization (departmentName VARCHAR(255) DEFAULT NULL, phone VARCHAR(16) DEFAULT NULL, institutionId INT NOT NULL, sessionId INT NOT NULL, userId INT NOT NULL, INDEX IDX_43EDEF2F76065B2 (institutionId), INDEX IDX_43EDEF23950B5F6 (sessionId), INDEX IDX_43EDEF264B64DCC (userId), PRIMARY KEY(institutionId, sessionId, userId)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE institutioncontactsessionorganization ADD CONSTRAINT FK_43EDEF2F76065B2 FOREIGN KEY (institutionId) REFERENCES institution (id);
ALTER TABLE institutioncontactsessionorganization ADD CONSTRAINT FK_43EDEF23950B5F6 FOREIGN KEY (sessionId) REFERENCES session (id);
ALTER TABLE institutioncontactsessionorganization ADD CONSTRAINT FK_43EDEF264B64DCC FOREIGN KEY (userId) REFERENCES user (id);

我只是把它发布在 Doctrine github 上,看起来你不能让主键的任何部分(所以也是复合键(为空。

最新更新