Php Symfony条令中的鉴别器列重复或不存在
我有这种情况 实体Php Symfony条令中的鉴别器列重复或不存在,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有这种情况 实体 /** * Subdomain * @ORM\Entity * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="ridType", type="integer") * @ORM\DiscriminatorMap({"1" = "Miejsce\DomainBundle\Entity\MiejsceSubdomain"}) * * @ORM\Table(name="mSub
/**
* Subdomain
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="ridType", type="integer")
* @ORM\DiscriminatorMap({"1" = "Miejsce\DomainBundle\Entity\MiejsceSubdomain"})
*
* @ORM\Table(name="mSubdomains", indexes={
@ORM\Index(name="name", columns={"name"})
,@ORM\Index(name="ridridType", columns={"rid","ridType"})
}))
*/
class Subdomain
/**
* @ORM\Column(type="integer")
* @var integer
*/
private $ridType;
/**
* @ORM\Column(type="integer")
* @var integer
*/
private $rid;
实体MIEJSCE
/**
* @ORM\OneToOne(targetEntity="Miejsce\DomainBundle\Entity\MiejsceSubdomain", mappedBy="miejsce", cascade={"all"})
* @var Subdomain
*/
protected $subdomain;
实体MiejsceSubdomain
class MiejsceSubdomain extends Subdomain
{
/**
* @ORM\OneToOne(targetEntity="Miejsce\ObiektyBundle\Entity\Miejsce")
* @ORM\JoinColumn(name="rid", referencedColumnName="id")
*/
protected $miejsce;
}
给定:字段或鉴别器列映射中实体“Miejsce\DomainBundle\entity\Subdomain”上列“ridType”的重复定义
当我移除
/**
*@ORM\Column(type=“integer”)
*@var整数
*/
私家车类型
我尝试获取时出错
$dbrow = $this->repository->createQueryBuilder('s')
->select(['s.rid','s.ridType'])
->where('s.name=:name')
->setParameter('name',$subdomain)
->getQuery()
->getOneOrNullResult();
[Semantical Error] line 0, col 16 near 'ridType FROM': Error: Class Miejsce\DomainBundle\Entity\Subdomain has no field or association named ridType
更新1
当我尝试从基本实体执行此操作时:
$subdomain = $this->miejsce->getSubdomain();
if(!$subdomain){
$subdomain = new Subdomain();
$subdomain->setRid($this->miejsce->getId());
}
$subdomain->setName($data['hotels_subdomain']);
$this->em->persist($subdomain);
使用参数[“naslonecznej lazy”,“6662”,null]:
SQLSTATE[23000]:完整性约束冲突:1048列“ridType”不能为null
更新2
$subdomain = $this->miejsce->getSubdomain();
if(!$subdomain){
$subdomain = new MiejsceSubdomain();
$subdomain->setRid($this->miejsce->getId());
}
$subdomain->setName($data['hotels_subdomain']);
$this->em->persist($subdomain);
给予
使用参数[“naslonecznej lazy”,null,1]:
SQLSTATE[23000]:完整性约束冲突:1048列“rid”不能为null
为什么rid是空的?
var_dump$子域给定
object(Miejsce\DomainBundle\Entity\MiejsceSubdomain)[696]
protected 'miejsce' => null
private 'id' (Miejsce\DomainBundle\Entity\Subdomain) => null
private 'name' (Miejsce\DomainBundle\Entity\Subdomain) => string 'aaa' (length=3)
private 'rid' (Miejsce\DomainBundle\Entity\Subdomain) => string '6662' (length=4)
更新3
我试着
同样的结果
使用参数[“naslonecznej lazy”,null,1]:
更新4
class Subdomain
{
/**
* @var integer
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", unique=true)
* @var string
*/
protected $name;
/**
* @ORM\Column(type="integer")
* @var integer
*/
protected $rid;
$subdomain = $this->miejsce->getSubdomain();
if(!$subdomain){
$subdomain = new MiejsceSubdomain();
$subdomain->setRid($this->miejsce->getId());
}
$subdomain->setName($data['hotels_subdomain']);
var_dump($subdomain);
$this->em->persist($subdomain);
仍然错误:
An exception occurred while executing 'INSERT INTO mSubdomains (name, rid, ridType) VALUES (?, ?, ?)' with params ["naslonecznej-lazy", null, 1]:
变量转储:
object(Miejsce\DomainBundle\Entity\MiejsceSubdomain)[696]
protected 'miejsce' => null
protected 'rid' => string '6662' (length=4)
protected 'id' => null
protected 'name' => string 'naslonecznej-lazy' (length=17)
正确的是
如果(!$子域){
实体子域未映射到DiscriminatorMap中。您需要执行以下操作,例如:
* @ORM\DiscriminatorMap({"1" = "Miejsce\DomainBundle\Entity\MiejsceSubdomain", "2" = "Miejsce\DomainBundle\Entity\Subdomain"})
private$rid;
如果您希望子类能够访问此项,则此项不能为private。我将更改为protected,但有相同的错误-运行php应用程序/控制台缓存:清除什么原因导致此项不起作用?
$subdomain = new MiejsceSubdomain();
$subdomain->setMiejsce($this->miejsce);
}
* @ORM\DiscriminatorMap({"1" = "Miejsce\DomainBundle\Entity\MiejsceSubdomain", "2" = "Miejsce\DomainBundle\Entity\Subdomain"})