Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有预定义和用户定义选项的复杂条令实体_Php_Symfony_Doctrine - Fatal编程技术网

Php 具有预定义和用户定义选项的复杂条令实体

Php 具有预定义和用户定义选项的复杂条令实体,php,symfony,doctrine,Php,Symfony,Doctrine,抱歉,如果标题是无用的,有麻烦的思考什么叫问题。我正在寻找一种方法来构建我的教义实体。我正试图为我和我的朋友们编写一个D&D字符表程序,目前我正在努力学习的是已知的语言 字符具有已知的语言 角色有一个种族,通常为角色定义一种已知的语言 角色有背景,通常可以选择学习许多其他语言 有没有一个像样的方法让条令来处理这些关系?我更喜欢将各个语言存储为它们自己的实体 因此: 字符表实体 已知语言一览表 种族实体 具有预定义的已知语言 背景实体 用户选择的语言数量可变 我想的是一个Languag

抱歉,如果标题是无用的,有麻烦的思考什么叫问题。我正在寻找一种方法来构建我的教义实体。我正试图为我和我的朋友们编写一个D&D字符表程序,目前我正在努力学习的是已知的语言

字符具有已知的语言

角色有一个种族,通常为角色定义一种已知的语言

角色有背景,通常可以选择学习许多其他语言

有没有一个像样的方法让条令来处理这些关系?我更喜欢将各个语言存储为它们自己的实体

因此:

字符表实体

  • 已知语言一览表
  • 种族实体

    • 具有预定义的已知语言
  • 背景实体

    • 用户选择的语言数量可变

我想的是一个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;

...