Details
Description
Hi there I encountered a bug. When was trying to get ManyToMany self referencing association via lazy loading.
Here is my Entity.
use Doctrine\Common\Collections\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_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; } }
When I call
$test = $this->getEntityManager()->getRepository('Users_Model_Entity_Role')->findOneBy(array('roleID' => 3));
Doctrine\Common\Util\Debug::dump($test); die;
The SQL that is generated is :
SELECT t0.roleID AS roleID1, t0.name AS name2, t0.shortName AS shortName3 FROM Roles t0 WHERE t0.roleID = ? array(1) { [0]=> int(3) }
SELECT t0.roleID AS roleID1, t0.name AS name2, t0.shortName AS shortName3 FROM Roles t0 INNER JOIN RoleRelations ON t0.roleID = RoleRelations.roleID WHERE RoleRelations.extendsRoleID = ?
array(1) {
[0]=>
int(3)
}
SELECT t0.roleID AS roleID1, t0.name AS name2, t0.shortName AS shortName3 FROM Roles t0 INNER JOIN RoleRelations ON t0.roleID = RoleRelations.extendsRoleID WHERE t0.roleID = ?
array(1) {
[0]=>
int(3)
}
In the last SQL query there is a mistake in the where clause it should be RoleRelations.roleID = ? and not t0.roleID = ?. And because of that it is not returning correct result.