使用CakePHP 2.x树行为时如何将其他数据写入表

时间:2017-11-30 12:15:38

标签: cakephp tree cakephp-2.0

我正在使用CakePHP 2.x应用程序并使用随附的树行为 - https://book.cakephp.org/2.0/en/core-libraries/behaviors/tree.html

我的表名为navigations,并且具有以下模式,该模式在文档中提供:

mysql> DESCRIBE navigations;
+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| parent_id | int(10)          | YES  |     | NULL    |                |
| lft       | int(10)          | YES  |     | NULL    |                |
| rght      | int(10)          | YES  |     | NULL    |                |
| name      | varchar(255)     | YES  |     |         |                |
+-----------+------------------+------+-----+---------+----------------+
5 rows in set (0.02 sec)

我的模型,Navigation.php配置为使用树行为:

class Navigation extends AppModel {

    public $actsAs = array('Tree');
}

我可以根据文档将数据写入我的表格,例如

$data['Navigation']['parent_id'] = 3;
$data['Navigation']['name'] = 'United Kingdom';
$this->Navigation->save($data);

但是......我需要在表格中存储一些额外的数据。

如果我在jstree_data类型VARCHAR(255)的表格中添加一个字段,我就无法将其写入包含以下内容的表格中:

$data['Navigation']['parent_id'] = 3;
$data['Navigation']['name'] = 'United Kingdom';
$data['Navigation']['jstree_data'] = 'foo'; // Attempt to write to 'jstree_data' field in database
$this->Navigation->save($data);

有人知道是否可以这样做?似乎通过使用树行为(模型中的public $actAs = array('Tree')),您将失去模型的正常功能并能够保存其他数据。

背景信息:

为什么我要这样做?我在一个项目中使用jstree。我需要在重新保存树之前删除所有现有记录。但是,因为id列是auto_increment,我需要存储"旧ID"在jstree_data中,因为这是来自jstree的JSON数据中的内容。基于此,我可以查看" new" ID(自动增量值),并在重新保存新子元素时将其与$data['Navigation']['parent_id']分配。

0 个答案:

没有答案