Symfony DiscriminatorColumn-具有多个实体的一个实体

时间:2018-10-01 11:10:00

标签: symfony doctrine discriminator

我有3个表格,Articles,ArticlesTree,fields18n ... 我当前的代码在fieldi18n和其他2个实体之间具有OnoToOne关系。 因此,我的fields18n的表中有articles_id的一列,而tree_id的则是另一列...我如何仅用一列命名为element_id来完成 如何使用DiscriminatorColumn?

HexFieldI18n:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\HexFieldI18nRepository")
 */
class HexFieldI18n
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
    /**
     * @ORM\OneToOne(targetEntity="App\Entity\HexArticlesTree", mappedBy="label", cascade={"persist", "remove"})
     */
    private $tree;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\HexArticles", mappedBy="label", cascade={"persist", "remove"})
     */

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\HexArticles", mappedBy="label", cascade={"persist", "remove"})
     */
    private $article;
}

HexArticles

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\HexArticlesRepository")
 */
class HexArticles
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\HexFieldI18n", inversedBy="article", cascade={"persist", "remove"})
     */
    private $label;
}

HexArticlesTree

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\HexArticlesTreeRepository")
 */
class HexArticlesTree
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\HexFieldI18n", inversedBy="article", cascade={"persist", "remove"})
     */
    private $label;
}

有什么想法吗? 谢谢

1 个答案:

答案 0 :(得分:0)

我不理解只有一列将被命名为element_id 。教义具有多个@InheritanceType注释,用于确定inheranceType SINGLE_TABLEJOINED。我只使用了SINGLE_TABLE继承,该继承基本上具有确定其实体的列,这些继承保存在用@DiscrimatorType批注标记的列中,您必须记住,实体不会持久化到数据库中,就像一个描述符。