Symfony学说中复制或不存在的SynatorColumn



我有这种情况

实体

/**
 * 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"})

相关内容

  • 没有找到相关文章

最新更新