Details
-
Type:
Bug
-
Status:
Resolved
-
Priority:
Minor
-
Resolution: Duplicate
-
Affects Version/s: 2.0.3, 2.3
-
Fix Version/s: None
-
Component/s: DQL
-
Security Level: All
-
Labels:None
-
Environment:Ubuntu 11.04
Description
I've created an entity that has a one to one relationship to a class in an inheritance tree and I'm using class table inheritance in Doctrine. When I try to add a DQL WITH statement on a column in the super class to the join, the generated SQL incorrectly places the statement in the child classes JOIN ON section.
Here's the DQL:
SELECT p FROM Fampus_Entity_Photo p LEFT JOIN p.flag f WITH f.status='ok'
Here's the generated SQL:
SELECT p0_.id AS id0, p0_.name AS name1, p0_.path AS path2, p0_.type AS type3, p0_.reference_id AS reference_id4, p0_.view_count AS view_count5, p0_.created AS created6, p0_.modified AS modified7, p0_.event_id AS event_id8, p0_.user_id AS user_id9, p0_.school_id AS school_id10, p0_.flag_id AS flag_id11 FROM photos p0_ LEFT JOIN flaggedcontent_photo f1_ ON p0_.flag_id = f1_.id AND (f2_.status = 'ok') LEFT JOIN flaggedcontent f2_ ON f1_.id = f2_.id
Note that f2_.status = 'ok' is the correct statement, but it is in the wrong LEFT JOIN ON section.
Here are my entities (significantly clipped):
/** * @Table(name="photos") */ class Photo { /** * @OneToOne(targetEntity="FlaggedContent_Photo", mappedBy="photo") * @JoinColumn(nullable=true) */ protected $flag; } /** * @DiscriminatorColumn(name="type") * @DiscriminatorMap({ * "photo" = "FlaggedContent_Photo" * }) * @InheritanceType("JOINED") * @Table(name="flaggedcontent") */ abstract class FlaggedContent { /** * Database identifier * * @Id * @Column(type="integer") * @GeneratedValue(strategy="AUTO") */ protected $id; /** * Status * * @Column(type="text") * @var string */ protected $status; } /** * @Entity * @Table(name="flaggedcontent_photo") */ class FlaggedContent_Photo extends FlaggedContent { /** * @OneToOne(targetEntity="Photo", inversedBy="flag") */ protected $photo; }