2012-04-11 77 views
0

我必須做一個博客作業。在其中,我必須在有人添加帖子時更新字段。該字段位於用戶表中,名稱爲no_of_posts。當某人發佈某些內容時,應該檢索與登錄用戶相關的no_of_posts的值,然後將其加1並更新回數據庫。如何從數據庫獲取值並將修改後的值更新到cakephp中的數據庫?

我想下面的代碼,但它沒有解決問題。 $ userid保存當前用戶標識。

$userid = $this->Auth->user('id');

$userpost = $this->User->query("SELECT no_of_posts FROM users WHERE id = '$userid'");

$userpost++;

$this->User->query("UPDATE users SET no_of_posts = '$userpost' WHERE id = '$userid'");

我也使用find試過沒有用它,但。

$userpost = $this->User->find('count', array('conditions'=>array('User.id'=>$userid)));

感謝您的任何幫助。

回答

0

你會想看看counterCache。 只要您正確設置了Post模型和User模型之間的關係(無論如何您都應該這樣做),Cake會自動爲您追蹤帖子計數,只需添加幾行代碼即可。

入住此頁面中CakePHP的食譜:http://book.cakephp.org/1.3/en/view/1033/counterCache-Cache-your-count


至於你在做什麼錯在你的例子:查詢叫你做返回數組,所以它的唯一合乎邏輯,你的更新查詢失敗。

除此之外,使用query()方法確實不是CakePHP的做事方式。你應該真的閱讀模型上的Cookbook頁面,因爲現在你沒有使用CakePHP的全部功能。查找食譜網頁我的意思是:http://book.cakephp.org/1.3/en/view/1000/Models

+0

非常感謝你的工作..查詢部分是我最後的努力,直到我嘗試了很多其他的東西。 – 2012-04-11 07:27:12

+0

哪部分工作?修復查詢或使用counterCache? 出於'正確的方式'觀點,我希望你使用的是counterCache,這樣,如果你構建了其他創建/刪除的函數,你將永遠不必考慮自己更新計數器帖子。 另外,你會介意接受這個答案嗎?它會顯示問題在索引中回答,因此人們不會解決問題。 – Joep 2012-04-11 07:33:44

+0

counterCache工作只需添加'counterCache'=> true屬於數組並重命名錶中的字段。 – 2012-04-11 08:29:47