我正在使用Class Table Inheritance策略實現與D2的繼承映射。我有一個名爲的人使用下面的代碼塊Doctrine 2的鑑別器問題
namespace Zain\Entity;
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="Specialty", type="string") // what other types exist?
* @DiscriminatorMap({"person" = "\Zain\Person", "employee" = "\Staff\Entities\Employee"})
*
* @Table(name="db_One.tblPerson")
*
*/
class Person
{
...
一個父類,我有下面的代碼名爲Employee的子類:
namespace Staff\Entities;
/**
* Description of Employee
* @Entity
* @Table(name="db_Two.tblEmployee")
*
*/
class Employee extends \Zain\Entity\Person
{
...
MySQL表:tblPerson有一個叫做專業鑑別列定義爲:
`Specialty` varchar(45) NOT NULL
當我有一個Employee實例並試圖保留它時,會發生此問題。
當員工實例持久化時,我期望對象名稱employee(string)將被保存在Person Person的專業列中。 但是這並沒有發生。我遇到的錯誤消息:
Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'specialty' cannot be null
我明白這錯誤意味着沒有值被傳遞用於產生和被EntityManager使用SQL語句中的特殊列。並且我已經在tblPerson> Specialty Column上設置了一個Not Null約束。
如果我刪除了非空約束,我可以得到這個工作 - 但是這會破壞目的。爲了解決這個問題,你能告訴我如何檢索在持續調用期間被實體管理器使用/將要使用的生成的SQL語句嗎?
如果能結束好幾天的搜索答案,那將是一件非常棒的事情。再次感謝。
這肯定已經完成的「魔力」 - 非常感謝 – 2011-05-03 14:51:58
未完成的請求,雖然是:在幫助了這一點,請你告訴我如何檢索使用生成的SQL語句/由實體管理過程中使用堅持不懈的呼籲? – 2011-05-03 14:53:27
@pi - 你需要配置SQL記錄儀的教義。詳情點擊此處:http://www.doctrine-project.org/docs/orm/2.0/en/reference/configuration.html#sql-logger-optional – rojoca 2011-05-03 17:05:50