मुझे एक डॉक्टरेट रिपोजिटरी क्वेरी में भेदभावकर्ता कॉलम द्वारा ऑर्डर करने के बारे में कैसे जाना चाहिए?सिद्धांत 2 - मैं भेदभावकर्ता कॉलम द्वारा कैसे आदेश दे सकता हूं?
मेरे पास एक बहुत सीधी आगे सेटअप है, मेरे पास विभिन्न प्रकार के भुगतान विवरण हैं, या तो यह क्रेडिट कार्ड (सीसी) या डेबिट ऑर्डर (डीओ) हो सकता है।
इसलिए मैंने इसे प्राप्त करने के लिए एक एकल टेबल विरासत मानचित्रण रणनीति लागू की है, लेकिन समस्या तब आती है जब मैं भेदभावकर्ता कॉलम द्वारा आदेश देने का प्रयास करता हूं, क्योंकि भेदभावकर्ता कॉलम बेस क्लास में मौजूद नहीं है।
भंडार समारोह:
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();
}
बेस PaymentDetail इकाई:
/**
* @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... */
}
डेबिट आदेश PaymentDetail इकाई:
/**
* 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... */
}
क्रेडिट कार्ड PaymentDetail इकाई:
/**
* 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... */
}
जब मैं कोशिश है कि, मैं इस त्रुटि मिलती है,
Error: Class AccountingBundle\Entity\PaymentDetail has no field or association named method_type")
अपने भेदभावकर्ता-कॉलम घोषणा '* @ डिस्क्रिमिनेटर कॉलम (नाम = "भुगतान विधि विधि" पर ध्यान दें और जांचें कि आपके डेटाबेस में जेनरेट किए गए कॉलम का नाम क्या है ... मुझे पूरा यकीन है कि कॉलम-/फ़ील्ड-नाम ' PaymentMethodType' और 'method_type' नहीं। क्या आप इसकी पुष्टि कर सकते हैं? – nifr
मैं इसकी पुष्टि कर सकता हूं। लेकिन, समस्या तब आती रहती है जब मैं कॉलम द्वारा ऑर्डर करने का प्रयास करता हूं जो तकनीकी रूप से सिद्धांत की आंखों में मौजूद नहीं है, मैंने MethodMtype को methodMethodType में बदलने का प्रयास किया रेपो फ़ंक्शन में, और मुझे मिल गया ... '(" [सेमेन्टिकल एरर] लाइन 0, 'भुगतान विधि विधि' के पास कर्नल 388: त्रुटि: 'भुगतान विधि विधि' परिभाषित नहीं है। ") – Odyss3us
क्या आपको इसके लिए कोई समाधान मिला? – loostro