2010-08-06 20:01:06 +04:00
< ? 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
*/
public function addGroup ( Group $child ) {
2011-05-14 07:49:46 +04:00
if ( ! $this -> children -> contains ( $child )) {
$this -> children -> add ( $child );
$child -> addGroup ( $this );
}
2010-08-06 20:01:06 +04:00
}
/**
* adds channel as new child
*
* @ param Channel $child
*/
public function addChannel ( Channel $child ) {
2011-05-14 07:49:46 +04:00
if ( ! $this -> channels -> contains ( $child )) {
$this -> channels -> add ( $child );
}
2010-08-06 20:01:06 +04:00
}
/**
* 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 ; }
}