我有这种情况
实体
/**
* Subdomain
* @ORMEntity
* @ORMInheritanceType("SINGLE_TABLE")
* @ORMDiscriminatorColumn(name="ridType", type="integer")
* @ORMDiscriminatorMap({"1" = "MiejsceDomainBundleEntityMiejsceSubdomain"})
*
* @ORMTable(name="mSubdomains", indexes={
@ORMIndex(name="name", columns={"name"})
,@ORMIndex(name="ridridType", columns={"rid","ridType"})
}))
*/
class Subdomain
/**
* @ORMColumn(type="integer")
* @var integer
*/
private $ridType;
/**
* @ORMColumn(type="integer")
* @var integer
*/
private $rid;
实体miejsce
/**
* @ORMOneToOne(targetEntity="MiejsceDomainBundleEntityMiejsceSubdomain", mappedBy="miejsce", cascade={"all"})
* @var Subdomain
*/
protected $subdomain;
实体miejscesubdomain
class MiejsceSubdomain extends Subdomain
{
/**
* @ORMOneToOne(targetEntity="MiejsceObiektyBundleEntityMiejsce")
* @ORMJoinColumn(name="rid", referencedColumnName="id")
*/
protected $miejsce;
}
给出:在实体 domainbundle entity subdomain'在字段或歧视列映射中的'ridtype'的列的重复定义。
当我删除
时/** * @orm column(type =" integer") * @Var Integer */ 私人$ ridtype;
尝试获得
时会出现错误 $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 MiejsceDomainBundleEntitySubdomain 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);
用params执行"插入"插入msubdomains"(name,rid,?,?)'时,发生了一个例外。
sqlstate [23000]:完整性约束违规:1048列" ridtype"不能为null
update2
$subdomain = $this->miejsce->getSubdomain();
if(!$subdomain){
$subdomain = new MiejsceSubdomain();
$subdomain->setRid($this->miejsce->getId());
}
$subdomain->setName($data['hotels_subdomain']);
$this->em->persist($subdomain);
给予
用params执行"插入"插入msubdomains"(name,rid,?,?)时,发生了一个例外[naslonecznej-lazy',null,1]:
sqlstate [23000]:完整性约束违规:1048列'rid'不能为null
为什么RID为空? var_dump $ subdomain给予
object(MiejsceDomainBundleEntityMiejsceSubdomain)[696]
protected 'miejsce' => null
private 'id' (MiejsceDomainBundleEntitySubdomain) => null
private 'name' (MiejsceDomainBundleEntitySubdomain) => string 'aaa' (length=3)
private 'rid' (MiejsceDomainBundleEntitySubdomain) => string '6662' (length=4)
update3我尝试
$subdomain = $this->miejsce->getSubdomain();
if(!$subdomain){
$subdomain = new MiejsceSubdomain();
$subdomain->setRid($this->miejsce->getId());
}
$subdomain->setName($data['hotels_subdomain']);
$this->miejsce->setSubdomain($subdomain);
$this->em->persist($this->miejsce);
相同的结果用params执行"插入MSUBDONAIN(name,ridtype)值(?,??)"时发生了一个例外[naslonecznej-lazy',null,1]:
update4
class Subdomain
{
/**
* @var integer
* @ORMColumn(type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORMColumn(type="string", unique=true)
* @var string
*/
protected $name;
/**
* @ORMColumn(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]:
var_dump:
object(MiejsceDomainBundleEntityMiejsceSubdomain)[696]
protected 'miejsce' => null
protected 'rid' => string '6662' (length=4)
protected 'id' => null
protected 'name' => string 'naslonecznej-lazy' (length=17)
正确的是
if(!$ subdomain){
$subdomain = new MiejsceSubdomain();
$subdomain->setMiejsce($this->miejsce);
}
实体子域未用IndicnatorMap映射。您需要做:
* @ORMDiscriminatorMap({"1" = "MiejsceDomainBundleEntityMiejsceSubdomain", "2" = "MiejsceDomainBundleEntitySubdomain"})