2011-06-14 75 views
2

就在兩天前我發現了Kohana,在遇到一些問題並設法解決它們之後,我遇到了一個很奇怪的問題。 當我嘗試更新數據庫中的條目時,而不是更新條目ORM只是插入一個新行。 一切與此類似例子http://kohanaframework.org/3.0/guide/orm/examples/simple
我的代碼(控制文件):Kohana ORM更新不能正常工作

class Controller_Admin extends Controller { 
    ... 
    public function action_test($id) 
    { 
     $inquiry = ORM::factory('inquiry')->where('Id', '=', $id)->find(); // $inquiry = Model_Inquiry($id) doesn't work, too 
     $inquiry ->Name = 'Someone'; 
     $inquiry ->save(); 
    } 
    ... 
} 

型號文件:

class Model_Inquiry extends ORM 
{ 
    protected $_table_name = 'mytable'; 
} 

你有爲什麼它插入一個新的項目,而不是更新舊的任何想法一?我讀到這是因爲ID沒有正確設置,但我嘗試使用固定值( - > where('Id','=',5)),但它不起作用(它仍然插入一個新行)。

在此先感謝!

回答

2

您的記錄沒有加載到第一位。要檢查它的加載,這樣做:

if ($inquiry->loaded()){... 

此外,您還可以檢查哪些語句已經做運行:

echo $inquiry->last_query(); 

所以,你可以手動檢查究竟是返回到ORM。

這裏的主要問題是,您使用save()而不是更嚴格,並使用create()/update()。如果您使用update(),ORM將拋出一個異常,抱怨未加載記錄。

保存基本上是這些方法的代理,依賴於加載狀態。

(我假設你使用的是Kohana 3.1,因爲3.0 ORM根本沒有獨立的更新/創建方法)

+0

謝謝!該記錄未加載,因爲主鍵列是'Id'而不是'id'。我必須用受保護的$ _primary_key ='Id'覆蓋默認值。 – Eustace 2011-06-15 09:20:18