所以我正在尝试使用TreeBehavior的recover方法,因为我认为我的一些数据已损坏。尝试执行此操作时,我收到此SQL错误:
错误:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“AND”附近使用正确的语法
SQL查询:更新fracmerl_dev
。categories
AS Category
设置Category
。lft
= Category
。lft
+ 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行,但我已经仔细检查了,这绝对是行。
由于
答案 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找到要查找的项目,以便对数据进行整理。