这个问题可能听起来很奇怪,事实确实如此。问题在于:我有一个模型FollowingStationLine
及其对应的表following_station_lines
。在模型中,我试图用$this->save(array('field' => 'value));
保存记录。当我点击相应的页面时,该方法似乎是在一个无限循环中调用(我在save语句之前和之后放了一些debug()
),它只在达到内存限制时才结束。我甚至试过2GB的内存,但问题仍然存在。
从FollowingStationLinesController
以外的其他控制器调用方法时也会发生这种情况。除此之外,所有其他模型/表格都按预期工作。我真的无法想象这是什么问题。以下是控制器的代码,分别是模型:
控制器:
App::uses('AppController', 'Controller');
class FollowingStationLinesController extends AppController {
public function admin_set() {
$this->FollowingStationLine->set(array(1));
}
}
型号:
App::uses('AppModel', 'Model');
class FollowingStationLine extends AppModel {
public function set($lineIds = array()){
if(!is_array($lineIds)){
return false;
}
$save = array();
$save[] = array('station_id' => 45);
debug($save[0]);
$this->save($save[0]);
}
}
任何帮助都将受到高度赞赏!
答案 0 :(得分:4)
CakePHP的AppModel类有一个名为'set'的函数,由模型的'save'函数调用。通过覆盖'set',您将在两种方法之间产生循环。
将您的功能重命名为其他内容,您应该没问题。
您可以查看AppModel来源以获取更多信息:https://github.com/cakephp/cakephp/blob/master/lib/Cake/Model/Model.php
更新:
@mark发表了非常好的评论,如果您的PHP配置包含错误报告模式E_STRICT,那么您将收到错误,因为覆盖了不匹配的签名。
有关设置配置的详细信息:http://php.net/manual/en/migrating5.errorrep.php