2014-02-25 15 views
1

型號,簡稱:

function doStuff { 
    foreach(thing) { 
     fields = makeFields() 
     saveStuff(fields) 
    } 
} 

function saveStuff (fields = array()) { 
    if (a record with field data does not yet exist) { 
    $this->save(fields) 
} 

以上會創建一個新的記錄,並且對於每個foreach迭代更新記錄,因爲Cake'在內存中加載'新記錄,爲$this->save()提供id,該記錄不應該在那裏。

解決方案是$this->create(),但這可以防止創建和修改的字段無法正常工作(數據庫條目爲零,0000-00-00 00:00:00)。有什麼建議麼?我想可能會在保存後以另一種方式取消設置數據,但這是否也會破壞創建/修改的字段?

使用CakePHP 2.4.4

+0

定義「不工作」。創建/修改相關的字段沒有問題。這必須是您的應用程序代碼中的內容。發佈「縮寫」代碼無助於追蹤問題。 – burzum

+1

原始方法:'$ this-> id = null'。如果存在'id',Cake將更新該行。否則,它會創建它。 – Eagle

+0

@鷹 - 這不起作用 - 重載東西或其他'沒有效果'。然而,它確實讓我思考空的領域,因此是答案。 – StringsOnFire

回答

1

找出它。

$this->create()加載一個「空白畫布」,這因此,根據定義,包括記錄中的所有可用領域,用自己默認值

在DB中,我已將createdmodified字段的默認值設置爲0000-00-00 00:00:00。因此,$this->create()將使用模型數據中的默認值填充這些字段。要使自動填充工作,它們必須是空的。我把默認設置爲none,一切都很好。

相關問題