2011-11-17 138 views
0

我正在使用Kohana 3.2,並在我的控制器中有以下代碼。Kohana 3.2 ORM不包含模型信息

$Blog_Post = new Model_Blogpost(); 

    $Blog_Post->where('id', '=', 1); 
    $Blog_Post->find(); 

    $content = $Blog_Post->content; 

我目前有3條記錄在我的數據庫與ID的1,2,和3

$ Blog_Post->的內容,或任何其他領域返回null。我不知道爲什麼。

回答

2
  1. 使用ORM::factory('blogpost', $id)new Model_Blogpost($id)如果您需要PK == $ ID的對象。

  2. 加載後請檢查您的模型。

if $Blog_Post->loaded() 
    { 
     // it works! 
    } 
    else 
    { 
     // record not found 
    } 

如果沒有找到記錄,你可以看到最後一個DB查詢與$Blog_Post->last_query()

UPD。從評論。此模型不適用於此修改。請注意,存儲在$_object屬性中的ORM數據和$Blog_Post->content只是$Blog_Post->_object['content']通過__get()方法的快捷方式。當然,如果你定義了公共$content屬性,$Blog_Post->content將返回NULL值而不是使用DB數據。

沒有理由將模型字段定義爲屬性。如果您需要IDE提示,請使用PHPDOC。

+0

這很奇怪,我過去曾經使用過這個工廠,但那也沒有奏效,我還使用了「new Model_Blogpost($ id)」,並檢查了對象被加載了,而且它還是!!但是我還是得到了$ Blog_Post-> content的空值。仔細觀察這個對象表明_object確實包含模型信息http://d.pr/fY99,但是所有的實際字段 – Onema

+1

看起來你在你的模型中有不正確的修改,你可以將它粘貼到某個地方(例如pastebin.com)嗎? – biakaveron

+0

你說的對,問題在於我如何定義我的模型。我在我的模型http://d.pr/Xp5B中重新聲明每個表字段,當我測試/學習框架時,我一直在做不同的事情,我猜想模型越簡單越好?如果編輯答案我會將它標記爲正確的。謝謝你的幫助! – Onema

0

在我工作的公司,我們正在考慮升級到最近的3.2。但是,在我們的評估中,我不記得看到ORM處理方法的差異。上述 此致看起來應該是這樣的:

$Blog_Post = ORM::factory('blogpost')->where('id', '=', 1)->find(); 

    $content = $Blog_Post->content; 

假設你的表稱爲相關博客文章,當然。我可能是錯的,如果我是,你能鏈接到顯示這種模型交互的文檔嗎?

+0

其實工廠返回一個新的模型,這就是爲什麼你可以做級聯方法調用。據我所知,你的代碼行和我的三行代碼是等價的。現在你確實提出了一個很好的觀點。當談到桌子的名字時。我的表格被稱爲blog_post而不是blogpost。雖然我的模型中有一個變量「protected $ _table_name ='blog_post';」它應該告訴模型我使用的是什麼表格。我覺得我在同一個地方:( – Onema