因此,我尝试使用TreeBehavior的恢复方法,因为我认为我的一些数据已损坏。当我尝试这样做的时候,我得到了这个SQL错误:
错误: SQLSTATE42000:语法错误或访问冲突: 1064您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解要在第1行使用near ' AND‘的正确语法SQL Query: UPDATE fracmerl_dev.categories AS Category SET Category.lft = Category.lft + 4203其中Category.lft介于和之间
显然,查询缺少一些值。我还收到了这样的警告:
注意(8):未定义的偏移:0 CORE/Cake/Model/Behavior/TreeBehavior.php,第865行
这是Cake版本2.3。
编辑:
TreeBehavior中的第865行是这段代码的最后一行:
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...的返回值没有偏移量0。PHP告诉我错误在该行,而不是861行,这似乎很奇怪,但我已经仔细检查过了,这绝对是该行。
谢谢
发布于 2013-07-17 22:19:11
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找到它想要找到的项目,以便继续对数据进行排序。
https://stackoverflow.com/questions/17083789
复制相似问题