【问题标题】:Doctrine @ORM\InheritanceType("SINGLE_TABLE") and empty DiscriminatorMap value教义 @ORM\InheritanceType("SINGLE_TABLE") 和空 DiscriminatorMap 值
【发布时间】:2014-01-09 06:46:17
【问题描述】:

我尝试使用鉴别器设置参考,但是当我尝试获取 miejsce 的子域时出现错误 - mysql 更新工作正常

错误是: 执行 'SELECT t0.id AS id1, t0.name AS name2, t0.rid AS rid3, t0.rid AS rid4, t0.ridType FROM mSubdomains t0 WHERE t0.rid = 时发生异常AND t0.ridType IN ()' 带参数 ["5922"]:

params 是正常的只有 miejsce.id 吗? ridType 应该是 1

当我将此查询推送到 phpmyadmin 时,我得到:

SELECT t0.id AS id1, t0.name AS name2, t0.rid AS rid3, t0.rid AS rid4, t0.ridType
FROM mSubdomains t0
WHERE t0.rid =5922
AND t0.ridType
IN ( 1 )
LIMIT 0 , 30

结果:

id1     name2   rid3    rid4    ridType     
1695    test    5922    5922    1

奇怪的是 rid3 , rid4 吗?

class Miejsce
{
...
   /**
     * @ORM\OneToMany(targetEntity="Miejsce\DomainBundle\Entity\MiejsceSubdomain", mappedBy="miejsce", cascade={"all"})
     * @var Subdomain
     */
    protected $subdomain;

如果 MiejsceSubdomain 不是抽象的,我会得到错误:

MappingException:实体 'Miejsce\DomainBundle\Entity\MiejsceSubdomain' 必须是 'Miejsce\DomainBundle\Entity\Subdomain' 的鉴别器映射的一部分,才能在继承层次结构中正确映射。或者,您可以将 'Miejsce\DomainBundle\Entity\Miej`sceSubdomain' 设为抽象类,以避免发生此异常。

/**
 * @ORM\Entity
 */
abstract class MiejsceSubdomain extends Subdomain
{

    /**
     * @ORM\ManyToOne(targetEntity="Miejsce\ObiektyBundle\Entity\Miejsce")
     * @ORM\JoinColumn(name="rid", referencedColumnName="id")
     */
    protected $miejsce;

}



/**
 * Subdomain
 * @ORM\Entity
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="ridType", type="integer")
 * @ORM\DiscriminatorMap({"1" = "Miejsce\ObiektyBundle\Entity\Miejsce"})
 *
 * @ORM\Table(name="mSubdomains", indexes={
    @ORM\Index(name="name", columns={"name"})
    ,@ORM\Index(name="ridridType", columns={"rid","ridType"})
}))
 */
class Subdomain
{


    /**
     * @var integer
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string")
     * @var string
     */
    private $name;

    /**
     * @ORM\Column(type="integer")
     * @var integer
     */
    private $rid;

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    DiscriminatorMap 应该指向子域实体的子级。 改变:

    • @ORM\DiscriminatorMap({"1" = "Miejsce\ObiektyBundle\Entity\Miejsce"})

    到:

    • @ORM\DiscriminatorMap({"1" = "Miejsce\ObiektyBundle\Entity\MiejsceSubdomain"})

    并从 MiejsceSubdomain 类中删除 abstract。 还将MiejsceSubdomain 重命名为SubdomainMiejsce

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多