1
votes

I Have this situation

Entity

/**
 * 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;

ENTITY MIEJSCE

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

ENTITY MiejsceSubdomain

class MiejsceSubdomain extends Subdomain
{

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

}

give : Duplicate definition of column 'ridType' on entity 'Miejsce\DomainBundle\Entity\Subdomain' in a field or discriminator column mapping.

when i remove

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

i get error when i try get

 $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 

UPDATE 1 when i try do it from base Entity :

$subdomain = $this->miejsce->getSubdomain();

        if(!$subdomain){
            $subdomain = new Subdomain();
            $subdomain->setRid($this->miejsce->getId());
        }
        $subdomain->setName($data['hotels_subdomain']);

        $this->em->persist($subdomain);

An exception occurred while executing 'INSERT INTO mSubdomains (name, rid, ridType) VALUES (?, ?, ?)' with params ["naslonecznej-lazy", "6662", null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'ridType' cannot be 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);

give

An exception occurred while executing 'INSERT INTO mSubdomains (name, rid, ridType) VALUES (?, ?, ?)' with params ["naslonecznej-lazy", null, 1]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'rid' cannot be null

Why rid is null ? var_dump $subdomain give

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)

UPDATE3 i try

$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);

Same results An exception occurred while executing 'INSERT INTO mSubdomains (name, rid, ridType) VALUES (?, ?, ?)' with params ["naslonecznej-lazy", null, 1]:

UPDATE4

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);

still error :

An exception occurred while executing 'INSERT INTO mSubdomains (name, rid, ridType) VALUES (?, ?, ?)' with params ["naslonecznej-lazy", null, 1]:

var_dump :

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)

correct is

if(!$subdomain){

        $subdomain = new MiejsceSubdomain();
        $subdomain->setMiejsce($this->miejsce);

    }
1
private $rid; this cannot be private if you want child class to have access to thisdomis86
i change to protected but have same error - run php app/console cache:clear what can by a reason to this not work ?Developer

1 Answers

1
votes

Entity Subdomain is not mapped in DiscriminatorMap. You need to do for example:

 * @ORM\DiscriminatorMap({"1" = "Miejsce\DomainBundle\Entity\MiejsceSubdomain", "2" = "Miejsce\DomainBundle\Entity\Subdomain"})