Php 具有预定义和用户定义选项的复杂条令实体
抱歉,如果标题是无用的,有麻烦的思考什么叫问题。我正在寻找一种方法来构建我的教义实体。我正试图为我和我的朋友们编写一个D&D字符表程序,目前我正在努力学习的是已知的语言 字符具有已知的语言 角色有一个种族,通常为角色定义一种已知的语言 角色有背景,通常可以选择学习许多其他语言 有没有一个像样的方法让条令来处理这些关系?我更喜欢将各个语言存储为它们自己的实体 因此: 字符表实体Php 具有预定义和用户定义选项的复杂条令实体,php,symfony,doctrine,Php,Symfony,Doctrine,抱歉,如果标题是无用的,有麻烦的思考什么叫问题。我正在寻找一种方法来构建我的教义实体。我正试图为我和我的朋友们编写一个D&D字符表程序,目前我正在努力学习的是已知的语言 字符具有已知的语言 角色有一个种族,通常为角色定义一种已知的语言 角色有背景,通常可以选择学习许多其他语言 有没有一个像样的方法让条令来处理这些关系?我更喜欢将各个语言存储为它们自己的实体 因此: 字符表实体 已知语言一览表 种族实体 具有预定义的已知语言 背景实体 用户选择的语言数量可变 我想的是一个Languag
- 已知语言一览表
- 种族实体
- 具有预定义的已知语言
- 背景实体
- 用户选择的语言数量可变
我想的是一个LanguageModifier类,它们可以扩展,这样以后如果其他东西也需要修改已知的语言,它将允许灵活性,我只是在可视化关系方面遇到了困难。您的问题太广泛,无法解决堆栈溢出问题;) 是的,你可以在教义中定义这些关系 我会使用一个语言实体
Race <--> Language (default language(s) of race)
Background <--> languages (default languages of background)
种族语言(种族的默认语言)
背景语言(背景的默认语言)
您可以有一个getLanguages,它获取这两种关系的语言,并将它们合并到一个数组中
或者您可以添加关系
Character <--> Languages (mastered languages)
字符语言(掌握的语言)
它允许您添加/删除语言以进行更多自定义。在本例中,当您添加种族/背景时,它只会将其默认语言添加到角色的语言集合。好的,所以我要查找的是覆盖字段关联映射: 所以我使用了一个特性,实体可以使用它来声明它们将修改语言中的字符:
...
trait CharacterLanguageModifier
{
/**
* @var bool
*/
protected $isCharacterLanguageModifier = true;
/**
* @ORM\ManyToMany(targetEntity="CharacterLanguage")
*
* @var ArrayCollection
*/
protected $definedLanguages;
/**
* @ORM\Column(type="integer", length=8)
*
* @var int
*/
protected $numUndefinedLanguages;
...
然后在CharacterRace实体中,使用AssociationOverride确保它获得自己的唯一表:
...
* @ORM\Entity()
* @ORM\AssociationOverrides({
* @ORM\AssociationOverride(name="definedLanguages",
* joinTable=@ORM\JoinTable(
* name="character_race_languages_defined"
* )
* )
* })
*/
class CharacterRace
{
use CharacterAttributeModifier,
CharacterLanguageModifier;
...