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);
}
private $rid;
this cannot be private if you want child class to have access to this – domis86