Doctrine2.1: recherche par DiscriminatorColumn résultats en “terrain Inconnu” exception

J'ai essayé de rechercher cette erreur, mais le fait que je n'ai rien trouvé qui m'amène à croire que je suis en train de faire quelque chose de stupide. Je vais inclure le code ci-dessous, mais, fondamentalement, je suis à l'aide de plusieurs héritage de table (ou La Classe De L'Héritage De Table) et l'utilisation de l'ORM Doctrine findBy() la méthode de requête sur la base de la colonne discriminante, qui résultats dans la suite de ORMException être jeté: "non reconnu champ: type".

Voici le code qui déclenche l'exception:

    //$this->em is an instance of \Doctrine\ORM\EntityManager
    $repository = $this->em->getRepository('JoeCommentBundle:Thread');

    return $repository->findOneBy(array(
        'type' => $this->type,
        'related_id' => $id
    ));

Voici le code approprié pour la "base" entité abstraite:

<?php

namespace Joe\Bundle\CommentBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 * @ORM\Table(name="comment_threads")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap( {"story" = "Joe\Bundle\StoryBundle\Entity\StoryThread"} )
 */
abstract class Thread
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="related_id", type="integer")
     */
    protected $relatedId;

    /** MORE FIELDS BELOW.... **/

Et enfin, voici le code pour le béton fil de l'entité:

<?php

namespace Joe\Bundle\StoryBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Joe\Bundle\CommentBundle\Entity\Thread as AbstractThread;

/**
 * @ORM\Entity
 * @ORM\Table(name="story_comment_threads")
 */
class StoryThread extends AbstractThread
{
    /**
     * @ORM\OneToOne(targetEntity="Story")
     * @ORM\JoinColumn(name="story_id", referencedColumnName="id")
     */
    protected $story;
}

J'ai vérifié mon schéma, et le type colonne certainement existe, donc je ne suis pas sûr de ce que pourrait en être la cause. Des idées? Merci.

La Doctrine doit prendre soin de mappage de colonne "type" pour vous. Je me demande si c'est un mot clé réservé et peut-être à l'origine de certains problèmes. Essayez de changer pour quelque chose d'autre et de voir si vous avez encore le problème.
Merci pour la réponse de Lee, mais de le changer pour "thread_type" n'a fait aucune différence. Heureusement, cela m'a forcé à fixer mon local xdebug et maintenant je peux voir qu'il y a une case dans "la Doctrine\ORM\objets persistants\BasicEntityPersister", sur la ligne 1205 comme suit: "if (isset($this->_class->columnNames[$champ]))". Le $this->_class->columnNames tableau ne contient pas discriminatoire de la colonne (en tant que "type" ou "thread_type') MAIS il y a un $this->_class->discriminatorColumn tableau qui contient les détails, que je suis après. Est-ce un bug, la Doctrine n'est-ce pas?
J'ai fait un peu plus de creuser et a constaté le problème suivant rapport de presque 2 ans: http://www.doctrine-project.org/jira/browse/DDC-707 Il a été marqué comme un double d'un bug résolu, mais je pense que le problème réel n'a été négligé.

OriginalL'auteur RobMasters | 2012-05-11