1
0
mirror of synced 2024-12-14 07:06:04 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php

107 lines
3.0 KiB
PHP

<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
require_once __DIR__ . '/../../../TestInit.php';
class DDC719Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
protected function setUp()
{
parent::setUp();
//$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC719Group'),
));
}
public function testIsEmptySqlGeneration()
{
$q = $this->_em->createQuery('SELECT g, c FROM Doctrine\Tests\ORM\Functional\Ticket\DDC719Group g LEFT JOIN g.children c WHERE g.parents IS EMPTY');
$this->assertEquals('SELECT g0_.name AS name0, g0_.description AS description1, g0_.id AS id2, g1_.name AS name3, g1_.description AS description4, g1_.id AS id5 FROM groups g0_ LEFT JOIN groups_groups g2_ ON g0_.id = g2_.parent_id LEFT JOIN groups g1_ ON g1_.id = g2_.child_id WHERE (SELECT COUNT(*) FROM groups_groups g3_ WHERE g3_.child_id = g0_.id) = 0', $q->getSQL());
}
}
/**
* @MappedSuperclass
*/
class Entity
{
/**
* @Id @GeneratedValue
* @Column(type="integer")
*/
protected $id;
public function getId() { return $this->id; }
}
/**
* @Entity
* @Table(name="groups")
*/
class DDC719Group extends Entity {
/** @Column(type="string", nullable=false) */
protected $name;
/** @Column(type="string", nullable=true) */
protected $description;
/**
* @ManyToMany(targetEntity="DDC719Group", inversedBy="parents")
* @JoinTable(name="groups_groups",
* joinColumns={@JoinColumn(name="parent_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="child_id", referencedColumnName="id")}
* )
*/
protected $children = NULL;
/**
* @ManyToMany(targetEntity="DDC719Group", mappedBy="children")
*/
protected $parents = NULL;
/**
* construct
*/
public function __construct() {
parent::__construct();
$this->channels = new ArrayCollection();
$this->children = new ArrayCollection();
$this->parents = new ArrayCollection();
}
/**
* adds group as new child
*
* @param Group $child
* @todo check against endless recursion
* @todo check if the group is already member of the group
*/
public function addGroup(Group $child) {
$this->children->add($child);
}
/**
* adds channel as new child
*
* @param Channel $child
* @todo check if the channel is already member of the group
*/
public function addChannel(Channel $child) {
$this->channels->add($child);
}
/**
* getter & setter
*/
public function getName() { return $this->name; }
public function setName($name) { $this->name = $name; }
public function getDescription() { return $this->description; }
public function setDescription($description) { $this->description = $description; }
public function getChildren() { return $this->children; }
public function getParents() { return $this->parents; }
public function getChannels() { return $this->channels; }
}