Archived post from my old blog (2007–2016), restored from the Wayback Machine. It is published as written at the time, in Italian; tools and versions are likely out of date.

Doctrine Bugs

  • php
  • symfony
  • bug
  • doctrine2
  • dql
  • inheritance

Ho appena perso mezzo pomeriggio per un bug di Doctrine:

Se si definisce un’entità come estensione di un’altra e questa entità ha fra le sue proprietà un mapping ManyToOne (ma credo anche ManyToMany o OneToMany) Doctrine genera un sql bacato solo nel caso si usi DQL

La cosa noiosa è che l’sql generato è corretto se si usa un find(), quindi il listing completo veniva correttamente eseguito, mentre lo show del singolo item no.

Il codice era del tipo:

/**
 * Category
 * @author Marco Albarelli 
 *
 * @ORM\Table()
 */
class Category extends Tag{
    /**
     * @var Category $parent
     * @ORM\ManyToOne(targetEntity="Category")
     */
    private $parent;

L’eccezione era così:

An exception has been thrown during the rendering of a template ("SQLSTATE[42P01]: Undefined table: 7 ERROR: missing FROM-clause entry for table "t0"
LINE 1: ...t1.parent_id AS parent_id7 FROM Category t1 WHERE t0.id = $1
^")

Alla fine per risolvere ho tolto l’extend e ho copia/incollato i campi e getters/setters della classe parent nella classe figlia

Il bug è già stato segnalato qui
La gestione dell’ereditarietà pare che sia un pelo problematica

← Archive