我應該如何處理由教義存儲庫查詢中的鑑別器列進行排序?Doctrine2 - 如何通過鑑別器列進行排序?
我有一個非常簡單的設置, 我有不同類型的付款細節, 它可以是信用卡(CC)或借記訂單(DO)。
所以我已經實現了一個單表繼承映射策略來實現這個, 但現在問題出現在我嘗試按鑑別器列排序時,因爲鑑別器列不在基類中。
的庫函數:
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")
看看你的鑑別器列聲明* @ DiscriminatorColumn(name =「PaymentMethodType」,並檢查數據庫中生成的列的名稱是什麼......我很確定column-/field-name是' PaymentMethodType'而不是'method_type'。你可以證實這一點嗎? – nifr
我可以證實這一點。但是,當我嘗試按照Doctrine眼中不存在的專欄進行排序時,問題一直存在,我嘗試將method_type更改爲PaymentMethodType在repo函數中,我得到了......'(「[Semantical Error] line 0,col 388 near'PaymentMethodType':Error:'PaymentMethodType'is not defined。」) – Odyss3us
你找到了解決方案嗎? – loostro