我尝试使用鉴别器设置引用,但是当我尝试获取miejsce的子域时出错 - mysql update work fine
错误是: 执行'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()'with params [“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;
答案 0 :(得分:1)
DiscriminatorMap应指向子域实体的子节点。 改变:
为:
从abstract
课程中删除MiejsceSubdomain
。
同时将MiejsceSubdomain
重命名为SubdomainMiejsce
。