2010-10-08 63 views
0

我正在CakePHP模型類中工作,編寫一個應該在模型上執行大量操作的函數。我試圖追隨瘦身控制器,胖模特的想法。但是,我似乎無法在我的模型中使用模型函數的任何。一些尚未初始化,但因爲我得到當我做一個SQL錯誤:無法在CakePHP的Model類中調用set或create來創建?

Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 [CORE/cake/libs/model/datasources/dbo_source.php, line 681] 

Query: SHOW FULL COLUMNS FROM 

看起來好像表名稱尚未在內部設置的地方。我的模型是這樣的:

class Search extends AppModel { 
    var $name='Search'; 
    var $hasMany = 'SearchResult'; 
    var $actsAs = array('Containable'); 


    function search($query) { 
      $this->create(); 
      $this->set('query', $query); 
      $this->save(); 
     } 
} 

我知道模型需求已經創作的作品應有盡有,因爲調用該功能完全一樣的序列工作從模擬控制器的罰款。像這樣:

function search($query) { 
      $this->Search->create(); 
      $this->Search->set('query', $query); 
      $this->Search->save(); 
} 

這工作正常。那麼是什麼給了?這裏發生了什麼?

回答

0

該解決方案與我的功能search和CakePHP的調用堆棧中的更深層次結果是一個命名衝突。將該功能的名稱從search更改爲其他名稱(例如mySearch)對其進行了修正。

0

你想用set()方法做什麼? Model & Controller這個名字的方法存在,但我從來沒有理由在Model上下文中使用它。此外,你的特殊用途看起來就像它屬於Controller的背景(儘管這是一個受過教育的猜測)。

如果您試圖設置一個名爲query的變量,該變量可以被視圖訪問,那麼它需要位於控制器中。 create()save()當然是Model上下文的主要部分。

+0

這是一個非常簡化的版本。這是一個非常詳細的搜索功能,包含多個模型操作(根據對數據庫和其他模型的多個查詢創建父代和相關模型)。在模型的上下文中,'$ this-> set($ field,$ value);'與$ this-> data [$ field] = $ value相同;'這個問題變成了一個名字我的'search'函數和Cake的調用棧中更深層次的內容相沖突。改變功能的名稱使所有事情都再次開心。 – 2010-10-08 13:31:55

+0

很高興你跟蹤它。太糟糕了'Model :: set'的文檔並不像你的解釋那麼簡潔。 – 2010-10-08 14:30:07

+0

是的,文件肯定是相當缺乏。使蛋糕的學習曲線比需要的要粗糙得多。謝謝你的建議。 – 2010-10-09 07:21:12