CakePHP在自关联模型的父ID字段中保存新创建的ID

CakePHP在自关联模型的父ID字段中保存新创建的ID,cakephp,Cakephp,我有一个父/子自关联表,当id=parent\u id时,该id是它自己的父。但是,我在从添加操作/视图将数据保存到表中时遇到问题 从add.ctp视图-添加新记录时,我从下拉框中选择一个父id并输入一个名称 <?php echo $this->Form->input('parent_id', array('empty' => 'No Parent')); echo $this->Form->input('name'); ?> 我曾尝试

我有一个父/子自关联表,当id=parent\u id时,该id是它自己的父。但是,我在从添加操作/视图将数据保存到表中时遇到问题

从add.ctp视图-添加新记录时,我从下拉框中选择一个父id并输入一个名称

<?php
    echo $this->Form->input('parent_id', array('empty' => 'No Parent'));
    echo $this->Form->input('name');
?>
我曾尝试在beforeSave中设置parent_id=id,但由于id尚不存在,因此没有可分配parent_id的内容。我还尝试在控制器中调用“父”模型savefirst和saveAll,但这些都不起作用

控制器

public function add() {
    if ($this->request->is('post')) {
        $this->Item->create();

        //have tried calling parent model in self association first but 
        //if ($this->Item->ParentItem->save($this->request->data)) {
        if ($this->Item->saveAll($this->request->data)) {

            $this->Session->setFlash(__('The item has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The item could not be saved. Please, try again.'));
        }
    }
Item.php/模型关系

public $belongsTo = array(
  'ParentItem' => array(
  'className' => 'Item',
  'foreignKey' => 'parent_id',
  'conditions' => '',
  'fields' => '',
  'order' => ''
  )
);

public $hasMany = array(
  'ChildItem' => array(
  'className' => 'Item',
  'foreignKey' => 'parent_id',
  'dependent' => false,
  'conditions' => '',
  'fields' => '',
  'order' => '',
  ) 
);
我如何获取刚刚创建/保存的ID并将其保存到另一个字段(在本例中为parent_ID)

更新: 我在这方面做了更多的工作,我使用getInsertId()获取最后一个插入的Id,并试图将其保存到父\u Id中,但有一些东西阻止了这一点。我已经删除了所有的模型验证,以确保不是这样。但是,Cake(或我的关联设置)中是否有不允许parent_id=id的内容(即一行是它自己的父行)

这是我的添加操作中的最新代码…这将一行保存到DB,但没有父\u id。然后我尝试使用添加操作进行编辑并设置父\u id=id,但即使编辑也不允许保存

public function add() {
    if ($this->request->is('post')) {
        $this->Item->create();
        if ($this->Item->save($this->request->data)) {
            $last_id = $this->Item->getInsertId();
            $this->Item->saveField('parent_id', $last_id);
            $this->Session->setFlash(__('The item has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The item could not be saved. Please, try again.'));
        }
    }
我还尝试调用$this->Item->ParentItem->save(),saveAll,'deep'=>true,但仍然没有任何内容允许我更新parent\u id列


提前感谢

在您的关联模型中,您可以将
foregin_key
设置为
parent_id
,并将自动填充

因此,我遇到的问题是……在自连接模型中设置parent_id=id(使id基本上成为自己的父项)是由于我的模型文件中的这段代码

public $actsAs = array('Tree');
在再次阅读树行为之后,我意识到$this->Model->save(或saveField)并不适用于树结构和更新父ID。据我所知,应该使用行为函数。此外,树行为期望某些父ID为null(至少是顶级父ID),因此,如果我将其保留为树,则具有空parent_id的id将被视为父id

父字段必须能够有空值!如果您只给顶部元素一个零的父值,这可能会起作用,但重新排序树(以及可能的其他操作)将失败

所以我需要决定我是想使用树行为还是想在不使用树的情况下建立简单的父/子关系……我想我会在以后做,因为我不需要多级树,只需要一个父级和一个级别的子级


感谢回复。

感谢您的回复。我的模型中确实有外键设置,这就是为什么我感到困惑的原因……我编辑了我的问题以显示模型关系设置在玩了更多游戏之后,似乎我需要对项目执行保存(保存时会自动生成主id键)然后在新创建的项目上执行编辑,将id插入父项id…不过这似乎是需要做的,但我怀疑有一种更直接的方法可以做到这一点…向上投票一个有详细解释的完美问题,它可以帮助我解决我正在搜索的单个db表类别/父项id问题。。
public $actsAs = array('Tree');