setSource не учитывается поведением дерева Cakephp
Дерево поведения и ассоциаций хорошо работает в моем приложении.
Я пытаюсь переключить древовидную таблицу во время выполнения, которая хорошо работает со следующим кодом в методе beforeFind:
$this->setSource($table);
Однако, когда я перераспределяю дерево с помощью метода recovery, имя таблицы не учитывается для всех запросов: я получаю запросы SHOW COLUMN для новой таблицы и запросы SELECT для запроса по умолчанию. Я попытался отключить и очистить кэш моего приложения безуспешно.
Я также изменяю таблицу связанных моделей, но проблемы возникают и без этого.
Любой совет будет оценен.
Изменить: вот модель используется: https://github.com/croogo/croogo/blob/1.3/models/taxonomy.php
Я отключил (постоянно, а не во время выполнения) поведение кэша.
Я проследил проблему в метод восстановления, bindModel не принимает во внимание useTable.
$Model->bindModel(array('belongsTo' => array('VerifyParent' => array(
'className' => $Model->name,
'foreignKey' => $parent,
'fields' => array($Model->primaryKey, $left, $right, $parent),
))));
Я безуспешно пытался:
$Model->VerifyParent->useTable = $Model->useTable;
Я открыл билет на маяк: https://cakephp.lighthouseapp.com/projects/42648/tickets/3820-cannot-change-table-name-using-treebehaviorrecover-in-shell
belongsTo associations cannot define custom tables for the linked model. You may need to seed ClassRegistry with a properly configured model with the VerifyParent key.
1 ответ
Проблема может быть исправлена путем изменения поведения дерева:
$Model->VerifyParent->setSource($Model->useTable)
Эта ошибка принята и упоминается здесь: https://cakephp.lighthouseapp.com/projects/42648/tickets/3820-cannot-change-table-name-using-treebehaviorrecover-in-shell
Тем не менее, не уверен, что это будет исправлено в исходнике CakePHP, поскольку он очень специфичен.