Doctrine2 - Jak mogę zamówić przez kolumnę dyskryminatora?

Jak powinienem przejść do porządkowania przez kolumnę dyskryminatora w zapytaniu repozytorium doktryny?

Mam dość prostą konfigurację, mam różne rodzaje szczegółów płatności, może to być karta kredytowa (CC) lub polecenie zapłaty (DO).

Aby to osiągnąć, zaimplementowałem strategię mapowania dziedziczenia dla pojedynczej tabeli, ale problem pojawia się teraz, gdy próbuję zamówić przez kolumnę dyskryminatora, ponieważ kolumna dyskryminująca nie występuje w klasie bazowej.

Funkcja repozytorium:

public function getPaymentDetails (ClientContactInterface $clientContact)
{
    $dql = 'SELECT pd
            from
            AccountingBundle:PaymentDetail pd
            JOIN ClientProductBundle:ClientProduct cp
            WITH cp.payment_detail_id = pd.id
            WHERE
            cp.payment_detail_id = pd.id
            and cp.client_contact_id = :client_contact_id
            GROUP BY pd.id
            ORDER BY pd.method_type'; // Since pd.method_type is the discriminator column, I cannot order by it. And I need to be able to.

    $em = $this->getEntityManager();
    $query = $em->createQuery($dql)->setParameter('client_contact_id', $clientContact->getId());
    return $query->getResult();
}

Podstawowa jednostka płatności:

/**
 * @ORM\Entity(repositoryClass="AccountingBundle\Repository\PaymentDetailRepository")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\Table(name="PaymentDetails")
 * @ORM\DiscriminatorColumn(name="PaymentMethodType", type="string")
 * @ORM\DiscriminatorMap({ "DO" = "DOPaymentDetail", "CC" = "CCPaymentDetail"})
 */

class PaymentDetail implements PaymentDetailInterface
{

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

    /* etc... */
}

Jednostka Płatności Polecenia Zapłaty:

/**
 * AccountingBundle\Entity\DOPaymentDetail
 *
 * @ORM\Table(name="PaymentDetails")
 * @ORM\Entity
 */
class DOPaymentDetail extends PaymentDetail implements DOPaymentDetailInterface
{

    /**
     * @var string $account_holder
     *
     * @ORM\Column(name="DOAccountHolder", type="string", length=255)
     */
    protected $account_holder;

    /* etc... */
}

Jednostka płatności kartą płatniczą:

/**
 * AccountingBundle\Entity\CCPaymentDetail
 *
 * @ORM\Table(name="PaymentDetails")
 * @ORM\Entity
 */
class CCPaymentDetail extends PaymentDetail implements CCPaymentDetailInterface
{

    /**
     *
     * @var string $card_holder
     *
     * @ORM\Column(name="CCCardHolder", type="string", length=255)
     */
    protected $card_holder;

    /* etc... */
}

Kiedy to próbuję, otrzymuję ten błąd,

Error: Class AccountingBundle\Entity\PaymentDetail has no field or association named method_type") 

questionAnswers(3)

yourAnswerToTheQuestion