我正在使用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']
分配。