Doctrine 2 Discriminator Mapping приводит к тому, что методы findBy не работают - PullRequest
0 голосов
/ 02 марта 2012

У меня есть 2 сущности, одна из которых является основным суперклассом, который состоит из дискриминаторов и т. Д., А другая расширяет этот суперкласс ... так что я могу записать все действия в одну таблицу под названием Action.

myСущность дискриминатора:

namespace Entities\Members;

/**
 * @Entity
 * @Table(name="actions")
 * @MappedSuperClass
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="action_type", type="string")
 * @DiscriminatorMap({"comments" = "Comments", "blog" = "Blog"})
 * @HasLifecycleCallbacksIndex
 */
class Action {

    /**
     * @Id 
     * @Column(name="id", type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /** @Column(type="string", length=300, nullable=true) */
    public $name;

    /** @Column(name="action_date", type="datetime", columnDefinition="datetime", nullable=false) */
    protected $action_date;

    /** @PrePersist */
    public function updated() {
        $this->action_date = new \DateTime("now");
    }

}

это одна из моих сущностей, которую я использую для расширения вышеуказанной сущности дискриминатора:

namespace Entities\Members;

/**
 * @Entity
 * @Table(name="comments")
 * @HasLifecycleCallbacks
 */
class Comments extends Action {

    /**
     * @Id @Column(name="id", type="bigint",length=15)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /** @Column(name="blog_id", type="integer", nullable=true) */
    protected $blog_id;

    /** @Column(name="comment", type="string", length=255, nullable=true) */
    protected $comment;

    /** @Column(name="comment_date", type="datetime", columnDefinition="datetime", nullable=true) */
    protected $comment_date;

    /**
     * @ManyToOne(targetEntity="Members",inversedBy="comments", cascade={"persist"})
     * @JoinColumn(name="userid", referencedColumnName="id")
     */
    protected $author;


    public function __construct() {
        $this->comment_date = $this->comment_date = new \DateTime("now");
    }

}

это хорошо работает, когда я сохраняю сущность комментариев, например

$entity = new Entities\Comments;
$entity->comment = "my new comment";
$this->em->persist($entity);
$this->em->flush();

когда я сохраняюсь, он успешно добавляет действие в таблицу действий ...

однако я больше не могу использовать методы findBy, findByOne, возвращаемое значение любого результата этих методов= null теперь, когда я редактирую класс комментариев и удаляю 'extension from Action', начинает работать метод доктрины findby, findOneBy, но он не будет добавлен в таблицу дискриминатора tmy, поскольку он не расширяет основной суперкласс Actions ...

мне нужно, чтобы он расширял действия и имел такой метод учения, как find, findOneBy и т. Д., Чтобы он также работал ...

есть предложения?

1 Ответ

0 голосов
/ 02 марта 2012

Пожалуйста, оставьте свой код запроса.Мне было интересно посмотреть, как все это работает, поэтому я скопировал ваши сущности, а затем сделал запрос с:

protected function testJoinedQuery()
{
    $em = $this->getEntityManager();
    $repo = $em->getRepository('Entity\Comments');

    $entity = $repo->findOneBy(array('id' => 2));

    echo get_class($entity) . ' ' . $entity->getComment() . "\n";

}

Казалось бы, все работает нормально.Вы пытались использовать репозиторий Actions?

Вероятно, вам это не понадобится:

  • @ MappedSuperClass

Но это не кажетсяранить что-либо.

...