diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php new file mode 100644 index 000000000..8b59b4bf3 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php @@ -0,0 +1,427 @@ +_schemaTool->createSchema(array( + $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\Ticket\Lemma'), + $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\Ticket\Relation'), + $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\Ticket\RelationType') + )); + } catch (\Exception $e) { + // Swallow all exceptions. We do not test the schema tool here. + } + } + + public function testIssue() + { + //setup + $lemma1 = new Lemma; + $lemma1->setLemma('foo'); + + $lemma2 = new Lemma; + $lemma2->setLemma('bar'); + + $lemma3 = new Lemma; + $lemma3->setLemma('batz'); + + $lemma4 = new Lemma; + $lemma4->setLemma('bla'); + + $type1 = new RelationType; + $type1->setType('nonsense'); + $type1->setAbbreviation('non'); + + $type2 = new RelationType; + $type2->setType('quatsch'); + $type2->setAbbreviation('qu'); + + $relation1 = new Relation; + $relation1->setParent($lemma1); + $relation1->setChild($lemma2); + $relation1->setType($type1); + + $relation2 = new Relation; + $relation2->setParent($lemma1); + $relation2->setChild($lemma3); + $relation2->setType($type1); + + $relation3 = new Relation; + $relation3->setParent($lemma1); + $relation3->setChild($lemma4); + $relation3->setType($type2); + + $lemma1->addRelation($relation1); + $lemma1->addRelation($relation2); + $lemma1->addRelation($relation3); + + $this->_em->persist($type1); + $this->_em->persist($type2); + $this->_em->persist($lemma1); + $this->_em->persist($lemma2); + $this->_em->persist($lemma3); + $this->_em->persist($lemma4); + + $this->_em->flush(); + $this->_em->clear(); + //end setup + + // test One To Many + $query = $this->_em->createQuery("SELECT l FROM Doctrine\Tests\ORM\Functional\Ticket\Lemma l Where l.lemma = 'foo'"); + $res = $query->getResult(); + $lemma = $res[0]; + + $this->assertEquals('foo', $lemma->getLemma()); + $this->assertTrue($lemma instanceof Lemma); + $relations = $lemma->getRelations(); + + foreach($relations as $relation) { + $this->assertTrue($relation instanceof Relation); + $this->assertTrue($relation->getType()->getType() != ''); + } + + $this->_em->clear(); + + } +} + +/** + * @Entity + * @Table(name="lemma") + */ +class Lemma { + + const CLASS_NAME = __CLASS__; + + /** + * @var int + * @Id + * @Column(type="integer", name="lemma_id") + * @GeneratedValue(strategy="AUTO") + */ + private $id; + + /** + * + * @var string + * @Column(type="string", name="lemma_name", unique=true, length=255) + */ + private $lemma; + + + /** + * @var kateglo\application\utilities\collections\ArrayCollection + * @OneToMany(targetEntity="Relation", mappedBy="parent", cascade={"persist"}) + */ + private $relations; + + public function __construct() { + $this->types = new \Doctrine\Common\Collections\ArrayCollection(); + $this->relations = new \Doctrine\Common\Collections\ArrayCollection(); + } + + + /** + * + * @return int + */ + public function getId() { + return $this->id; + } + + /** + * + * @param string $lemma + * @return void + */ + public function setLemma($lemma) { + $this->lemma = $lemma; + } + + /** + * + * @return string + */ + public function getLemma() { + return $this->lemma; + } + + + /** + * + * @param Relation $relation + * @return void + */ + public function addRelation(Relation $relation) { + $this->relations[] = $relation; + $relation->setParent($this); + } + + /** + * + * @param Relation $relation + * @return void + */ + public function removeRelation(Relation $relation) { + /*@var $removed Relation */ + $removed = $this->relations->removeElement($relation); + if ($removed !== null) { + $removed->removeParent(); + } + } + + /** + * + * @return kateglo\application\utilities\collections\ArrayCollection + */ + public function getRelations() { + return $this->relations; + } + +} + +/** + * + * @Entity + * @Table(name="relation") + */ +class Relation { + + const CLASS_NAME = __CLASS__; + + /** + * @var int + * @Id + * @Column(type="integer", name="relation_id") + * @GeneratedValue(strategy="AUTO") + */ + private $id; + + /** + * @var Lemma + * @ManyToOne(targetEntity="Lemma") + * @JoinColumn(name="relation_parent_id", referencedColumnName="lemma_id") + */ + private $parent; + + /** + * @var Lemma + * @OneToOne(targetEntity="Lemma") + * @JoinColumn(name="relation_child_id", referencedColumnName="lemma_id") + */ + private $child; + + /** + * @var RelationType + * @ManyToOne(targetEntity="RelationType") + * @JoinColumn(name="relation_type_id", referencedColumnName="relation_type_id") + */ + private $type; + + /** + * + * @param Lemma $parent + * @return void + */ + public function setParent(Lemma $parent) { + $this->parent = $parent; + } + + /** + * + * @return Phrase + */ + public function getParent() { + return $this->parent; + } + + /** + * + * @return void + */ + public function removeParent() { + if ($this->lemma !== null) { + /*@var $phrase Lemma */ + $lemma = $this->parent; + $this->parent = null; + $lemma->removeRelation($this); + } + } + + /** + * + * @param Lemma $child + * @return void + */ + public function setChild(Lemma $child) { + $this->child = $child; + } + + /** + * + * @return Lemma + */ + public function getChild() { + return $this->child; + } + + /** + * + * @param RelationType $type + * @return void + */ + public function setType(RelationType $type) { + $this->type = $type; + } + + /** + * + * @return RelationType + */ + public function getType() { + return $this->type; + } + + /** + * + * @return void + */ + public function removeType() { + if ($this->type !== null) { + /*@var $phrase RelationType */ + $type = $this->type; + $this->type = null; + $type->removeRelation($this); + } + } +} + +/** + * + * @Entity + * @Table(name="relation_type") + */ +class RelationType { + + const CLASS_NAME = __CLASS__; + + /** + * + * @var int + * @Id + * @Column(type="integer", name="relation_type_id") + * @GeneratedValue(strategy="AUTO") + */ + private $id; + + /** + * + * @var string + * @Column(type="string", name="relation_type_name", unique=true, length=255) + */ + private $type; + + /** + * + * @var string + * @Column(type="string", name="relation_type_abbreviation", unique=true, length=255) + */ + private $abbreviation; + + /** + * @var kateglo\application\utilities\collections\ArrayCollection + * @OneToMany(targetEntity="Relation", mappedBy="type", cascade={"persist"}) + */ + private $relations; + + public function __construct() { + $relations = new \Doctrine\Common\Collections\ArrayCollection(); + } + + /** + * + * @return int + */ + public function getId() { + return $this->id; + } + + /** + * + * @param string $type + * @return void + */ + public function setType($type) { + $this->type = $type; + } + + /** + * + * @return string + */ + public function getType() { + return $this->type; + } + + /** + * + * @param string $abbreviation + * @return void + */ + public function setAbbreviation($abbreviation) { + $this->abbreviation = $abbreviation; + } + + /** + * + * @return string + */ + public function getAbbreviation() { + return $this->abbreviation; + } + + /** + * + * @param Relation $relation + * @return void + */ + public function addRelation(Relation $relation) { + $this->relations[] = $relation; + $relation->setType($this); + } + + /** + * + * @param Relation $relation + * @return void + */ + public function removeRelation(Relation $relation) { + /*@var $removed Relation */ + $removed = $this->relations->removeElement($relation); + if ($removed !== null) { + $removed->removeLemma(); + } + } + + /** + * + * @return kateglo\application\utilities\collections\ArrayCollection + */ + public function getRelations() { + return $this->relations; + } +} +