CakePHP TreeBehavior :: recover()SQL错误

时间:2013-06-13 09:35:28

标签: cakephp tree cakephp-2.3

所以我正在尝试使用TreeBehavior的recover方法,因为我认为我的一些数据已损坏。尝试执行此操作时,我收到此SQL错误:

错误:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“AND”附近使用正确的语法 SQL查询:更新fracmerl_devcategories AS Category设置Categorylft = Categorylft + 4203 WHERE {{ 1}}。Category BETWEEN和

显然查询缺少一些值。我也收到了这个警告:

注意(8):未定义的偏移量:0 [CORE / Cake / Model / Behavior / TreeBehavior.php,第865行]

这是Cake版本2.3。

编辑:

TreeBehavior中的第865行是此代码块中的最后一行:

lft

所以我假设 list($node) = array_values($Model->find('first', array( 'conditions' => array($scope, $Model->escapeField() => $Model->id), 'fields' => array($Model->primaryKey, $parent, $left, $right), 'recursive' => $recursive ))); //THIS IS LINE 865 的返回值没有偏移量array_values($Model->find...。似乎很奇怪,PHP告诉我错误是在那一行,而不是第861行,但我已经仔细检查了,这绝对是行。

由于

1 个答案:

答案 0 :(得分:0)

AD7six是对的,有些东西在干扰。我的模型中有一个beforeFind()回调,看起来像这样:

public function beforeFind($queryData){
    if ((!isset($queryData['exclude']) || $queryData['exclude']) && (empty($queryData['conditions']['Category.id']) || is_array($queryData['conditions']['Category.id']))){
        $queryData['conditions'][] = array('NOT' => array('Category.id' => $this->exclude));
    }
    return $queryData;
}

此回调阻止TreeBehavior找到要查找的项目,以便对数据进行整理。