2010-10-08 66 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