Hi all --
I've got a bit of an issue with a double join in Doctrine. This is using
Doctrine 2.4 with Zend 2.2, and MySQL 5.5.35.
I have three entities:
- Sets, which contain photos.
- Tags, which may have many photos.
- Photos, which may have many photos associated with them
The issue I have is with this bit of DQL, to get all the tags associated
with photos within a set:
$tagQuery=$entityManager->createQuery("SELECT DISTINCT t
FROM Hotfox\Entity\Tag t
LEFT JOIN t.photos p
LEFT JOIN p.set s
WHERE s.id = :set");
However, this then throws an error citing bad SQL generated by the DQL
parser:
An exception occurred while executing 'SELECT DISTINCT t0_.ta_id AS ta_id0,
t0_.ta_word AS ta_word1, t0_.ta_title AS ta_title2, t0_.ta_date_added AS
ta_date_added3, t0_.ta_groupid AS ta_groupid4 FROM tags t0_ LEFT JOIN LEFT
JOIN sets s2_ ON p1_.ph_setid = s2_.se_id WHERE s2_.se_id = ?' with params
["412"]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in
your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near 'LEFT JOIN sets s2_ ON p1_.ph_setid =
s2_.se_id WHERE s2_.se_id = '412'' at line 1
"LEFT JOIN LEFT JOIN"? It looks like it's not adding the inverse lookup of
the many-to-many relationship from the Photos entity.
So far I've regenerated the database from scratch using doctrine-module,
checked the entities are created in the database correctly, etc. Pulling
tags by photo and photos by set are working fine.
The relationships are defined thus (entities snipped for brevity):
class Tag
{
(....)
/**
* @var integer
*
* @ORM\Column(name="ta_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Hotfox\Entity\Photo",
mappedBy="ph_id", cascade={"all"})
**/
private $photos;
}
class Photo
{
(...)
/**
* @var integer
*
* @ORM\Column(name="ph_id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Hotfox\Entity\Set")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="ph_setid", referencedColumnName="se_id")
* })
*/
private $set;
/**
* @ORM\ManyToMany(targetEntity="Tag")
* @ORM\JoinTable(name="tag_photo_link",
* joinColumns={@ORM\JoinColumn(name="tm_photoid",
referencedColumnName="ph_id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tm_keywordid",
referencedColumnName="ta_id")}
* )
**/
private $tags;
}
class Set
{
/**
* @var integer
*
* @ORM\Column(name="se_id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
}
Any clues please?
Cheers
jx
--
You received this message because you are subscribed to the Google Groups
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/groups/opt_out.