-
-
Save doctrinebot/8346745114f8d5ca524e to your computer and use it in GitHub Desktop.
Attachments to Doctrine Jira Issue DDC-1054 - https://github.com/doctrine/doctrine2/issues/1645
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Doctrine\Common\Collections\ArrayCollection; | |
/** | |
* @Entity | |
* @Table(name="Privileges") | |
*/ | |
class Users_Model_Entity_Privilege extends Viscomp_Doctrine_Entity_Abstract | |
{ | |
/** | |
* @Id @Column(name="privilegeID", type="integer") | |
* @GeneratedValue(strategy="AUTO") | |
* | |
*/ | |
protected $privilegeID; | |
/** | |
* @Column (name="name", type="string", length="45") | |
* | |
* | |
*/ | |
protected $name; | |
/** | |
* @ManyToMany (targetEntity="Users_Model_Entity_Role", mappedBy="privilege") | |
*/ | |
protected $roles; | |
public function __construct() { | |
$this->roles = new ArrayCollection(); | |
} | |
} | |
/** | |
* | |
* @Table(name="Roles") | |
* @entity(repositoryClass="Users_Model_RoleRepo") | |
*/ | |
class Users_Model_Entity_Role extends Viscomp_Doctrine_Entity_Abstract | |
{ | |
/** | |
* @Id @Column(name="roleID", type="integer") | |
* @GeneratedValue(strategy="AUTO") | |
* | |
*/ | |
protected $roleID; | |
/** | |
* @Column (name="name", type="string", length="45") | |
* | |
* | |
*/ | |
protected $name; | |
/** | |
* @Column (name="shortName", type="string", length="45") | |
* | |
* | |
*/ | |
protected $shortName; | |
/** | |
* @ManyToMany (targetEntity="Users_Model_Entity_Privilege", inversedBy="roles") | |
* @JoinTable (name="RolePrivileges", | |
* joinColumns={@JoinColumn(name="roleID", referencedColumnName="roleID")}, | |
* inverseJoinColumns={@JoinColumn(name="privilegeID", referencedColumnName="privilegeID")} | |
* ) | |
*/ | |
protected $privilege; | |
/** | |
* @ManyToMany (targetEntity="Users_Model_Entity_Role", mappedBy="extends") | |
*/ | |
protected $extendedBy; | |
/** | |
* @ManyToMany (targetEntity="Users_Model_Entity_Role", inversedBy="extendedBy") | |
* @JoinTable (name="RoleRelations", | |
* joinColumns={@JoinColumn(name="roleID", referencedColumnName="roleID")}, | |
* inverseJoinColumns={@JoinColumn(name="extendsRoleID", referencedColumnName="roleID")} | |
* ) | |
*/ | |
protected $extends; | |
public function __construct() { | |
$this->extends = new ArrayCollection(); | |
$this->extendedBy = new ArrayCollection(); | |
$this->privilege = new ArrayCollection(); | |
$this->users = new ArrayCollection(); | |
} | |
} | |
Data: | |
------------------------------------------------------------------------------ | |
Role Relations: | |
roleRelationID | roleID | extendsRoleID | |
1 | 3 | 1 | |
2 | 4 | 3 | |
3 | 2 | 1 | |
All the roles have priviliges. | |
---------------------------------------------------------------------------- | |
$Q1 = $em->createQueryBuilder() | |
->select(array('roles', 'privilege', 'extendedBy', 'extends')) | |
->from('Users_Model_Entity_Role', 'roles') | |
->leftJoin('roles.privilege', 'privilege') | |
->leftJoin('roles.extendedBy', 'extendedBy') | |
->leftJoin('roles.extends', 'extends') | |
->where('roles.roleID = ?1') | |
->setParameter('1', '1') | |
->getQuery() | |
->getResult(); | |
//As you can see from the data role with ID 2 extends role with ID 1 | |
// so it is initialized through eager loading. | |
$Q2 = $em->createQueryBuilder() | |
->getRepository('Users_Model_Entity_Role') | |
->findOneBy(array('roleID' => 2)); | |
// invoked with lazy loading | |
$Q2->getPrivilege(); | |
/** | |
* Expected to return all the priviliges | |
* instead the result is 'NULL' | |
* / |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment