2015-06-22 60 views
0

所以我遇到了一個正在發生的奇怪的錯誤,但只有一些時間。我似乎無法確定導致它發生的任何事情。基本上,我有一個ActiveRecord,它與我的數據庫中的表格相對應。我將值賦給一個對象並且調用save()ActiveRecord保存後設置的ID不正確

可以說我有下面的代碼:

$student = new Student(); 
$student->name = "Gregg"; 
$student->surname = "Smith"; 
$student->gender = "Male"; 
$student->save(); 

然後我Student的活動記錄模式,我有以下幾點:

public function afterSave() 
{ 
    $this->assignStudent($this->id); 
} 

$this->id不保存後正確的ID。我可以看到日誌中的ID是1416253,而該記錄的DB中的ID是670336。這種情況怎麼會發生?

UPDATE 我做了一些更多的調查,似乎$這個 - > ID被分配最後插入ID後回做插入分配。除了它沒有返回save()插入的ID,而是返回先前已經完成的插入(插入的問題在log表中)。這意味着根據系統,插入到學生表中是不正確的(即使它是,因爲我可以在DB中看到記錄)。

+0

好的後期更新。那麼'$ student-save()'返回的是什麼? (應該是'true'或'false')。保存後你有沒有試過'$ student-> refresh()'? – Mat

+0

@Mat'refresh'不起作用,因爲它基本上只是使用ID進行選擇,這是不正確的。 – SynackSA

回答

0

我不知道如何出現錯誤的ID。錯誤的編號是否與表格的另一個記錄匹配?

你有沒有嘗試過這樣的事情,以確保是最新的?

public function afterSave() 
{ 
    $this->refresh(); 
    $this->assignStudent($this->id); 
} 

此外,文件指出「當覆蓋該方法,請確保調用父類的實現,以使事件被觸發」(documentation afterSave)。所以我認爲寫這一切的正確方法可能是:

public function afterSave($insert, $changedAttributes) 
{ 
    parent::afterSave($insert, $changedAttributes); 
    $this->refresh(); 
    $this->assignStudent($this->id); 
} 
+0

我只是做了一個更新。爲ActiveRecord設置的ID是'log'表中日誌條目的ID(這是前面插入的事情,我可以在日誌中看到,並且ID排隊)。我不知道這是如何發生的。 – SynackSA