Wie sollte ich über eine Diskriminatorspalte in einer Doktrin-Repository-Abfrage sortieren?Doctrine2 - Wie kann ich mit einer Diskriminatorspalte bestellen?
Ich habe einen ziemlich geradlinig Setup, ich verschiedene Arten von Zahlungsdetails habe, es entweder mit Kreditkarte (CC) oder Abbuchungsauftrag (DO) sein kann.
Also habe ich eine einzige Tabelle Vererbung Mapping-Strategie implementiert, um dies zu erreichen, aber das Problem kommt jetzt, wenn ich versuche, durch die Diskriminator-Spalte zu bestellen, da die Diskriminator-Spalte nicht in der Basisklasse vorhanden ist.
Die Repository-Funktion:
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();
}
Basis PaymentDetail Einheit:
/**
* @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... */
}
Abbuchungsauftrag PaymentDetail Einheit:
/**
* 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... */
}
Kreditkarte PaymentDetail Einheit:
Wenn ich versuche, dass ich diesen Fehler,
Error: Class AccountingBundle\Entity\PaymentDetail has no field or association named method_type")
schauen Sie sich Ihre discriminator-column -Deklaration '* @DiscriminatorColumn (name =" PaymentMethodType "' an und prüfen Sie, wie der Name der generierten Spalte in Ihrer Datenbank ist ... Ich bin ziemlich sicher, dass der Spalten-/Feldname 'ist PaymentMethodType "und nicht" method_type ". Kannst du das bestätigen? – nifr
Ich kann das bestätigen. Aber, das Problem kommt immer herein, wenn ich versuche, durch eine Spalte zu bestellen, die technisch in Doctrine's Augen nicht existiert, habe ich versucht, method_type zu PaymentMethodType zu ändern in der Repo-Funktion, und ich habe ... '(" [Semantische Fehler] Zeile 0, Spalte 388 in der Nähe von 'PaymentMethodType': Fehler: 'PaymentMethodType' ist nicht definiert. ")' – Odyss3us
haben Sie eine Lösung dafür gefunden? – loostro