2013-09-25 41 views
2

我有一個類似的問題,解釋爲in this post但提供的解決方案在我的情況下不起作用。這是問題...Doctrine2生成替代SQL默認值的INSERT語句

我正在使用Symfony2,它爲ORM使用Doctrine2,將新用戶插入數據庫。當我使用對象方法來插入用戶時,將一個空值插入到我不想插入任何內容的字段中(所以默認值將被插入)。

這是我想怎麼產生的INSERT語句來看看:

INSERT into mytable (name) VALUES (?) 
array(1) { 
    [1]=> 
    string(6) "myName" 
} 

這是教義是如何創建的INSERT語句

INSERT into mytable (name, token, creationDate) VALUES (?,?,?) 
array(3) { 
    [1]=> 
    string(6) "myName" 
    [2]=> 
    NULL 
    [3]=> 
    NULL 
} 

令牌應該有一個使用定義的默認值postgresql的uuid_generate_v5方法。 creationDate應該具有now()的默認值。教義正在插入的NULL值會覆蓋這些默認值。

有什麼辦法讓學說在插入時忽略某些字段?

+2

您可以將默認值放置在模型對象的構造函數中。 – Nanocom

+0

@Nanocom +1你不應該將默認值放在數據庫中,用Doctrine 2映射的字段。將默認值放在構造函數中,或者直接放在字段聲明中。 – Benjamin

+0

謝謝你。我沒有使用構造函數的原因是因爲有其他應用程序使用此數據庫,並且它們使用db中的默認值。使用相同的方法來生成令牌會很好。但如果不可能,那麼我可能需要考慮其他選項。謝謝 – setharell

回答

1

嘗試在列註釋中明確使用nullable = false屬性。

+0

感謝您的想法,但這也沒有奏效 – setharell

+0

數據庫中的字段是否有NOT NULL? – Pradeep

+0

我試圖在數據庫字段上的NOT NULL,但我得到了'非空侵犯',因爲它仍然插入NULL。 – setharell