我正试图找出在原则2中定义我的实体的最佳方法,但没有任何解决方案是真正正确的。我可能是从错误的角度进行这个,所以指针是非常感谢的。
问题是如何为用户定义实体和一个或多个概要文件。现在,我有了当前的设置:
用户
/**
* @ORM\Entity
*/
class User {
use AutoIdentifiable; //Trait for auto-generating an @id.
/**
* @ORM\OneToMany(targetEntity="UserProfile", mappedBy="user", cascade={"all"}, fetch="EAGER", orphanRemoval=TRUE)
* @var UserProfile
*/
protected $profiles;
}UserProfile
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"personalprofile" = "PersonalProfile", "companyprofile" = "CompanyProfile"})
*/
abstract class UserProfile {
use AutoIdentifiable;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="profiles", fetch="EAGER")
* @var User
*/
protected $user;
}PersonalProfile
/**
* @ORM\Entity
*/
class PersonalProfile extends UserProfile {
/**
* @ORM\Column(length=50)
* @var String
*/
protected $firstName;
/**
* @ORM\Column(length=50)
* @var String
*/
protected $lastName;
}CompanyProfile
/**
* @ORM\Entity
*/
class CompanyProfile extends UserProfile {
/**
* @ORM\Column
* @var String
*/
protected $name;
/**
* @ORM\Column(length=9)
* @var String
*/
protected $orgNr;
}如您所见,一个用户可以拥有一个或多个配置文件,其中包含非常不同的信息。如果我决定继续使用这个设计,我以后可能会根据用户的角色添加更多的配置文件。(例如,如果用户有一个个人博客,他们可能有一个BlogProfile,其中包含一张图片和一些关于自己的描述。)
问题是,加载和检查特定的配置文件是非常困难的,用户甚至可能有组合的配置文件。(例如: Personal+Blog)仅仅对每个特定的配置文件都有一个命名的引用似乎也不是一个好主意。我确实检查了装饰模式,但我不确定它是否合适。
的问题是:
发布于 2014-02-18 19:49:49
我自己还没有实现它,但我想您可以看看ResolveTargetEntityListener是如何在理论中使用的:
https://stackoverflow.com/questions/17274932
复制相似问题