Skip to content

Instantly share code, notes, and snippets.

@doctrinebot
Created December 13, 2015 18:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save doctrinebot/8346745114f8d5ca524e to your computer and use it in GitHub Desktop.
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
<?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