代码之家  ›  专栏  ›  技术社区  ›  miCRoSCoPiC_eaRthLinG

CakePHP:hasOne相关表在更新时保存多个条目

  •  0
  • miCRoSCoPiC_eaRthLinG  · 技术社区  · 15 年前

    完全不熟悉蛋糕。

    我有一个名为Content的表和另一个名为ContentMeta的表(通过Content\u id关联)。内容中的每个条目都有相应的ContentMeta。

    当我添加新内容时,这是我用于向ContentMeta添加新条目的代码:

    if( !empty( $this->data ) ) {
    
     // Save Content
     $this->Content->create();
     $content = $this->Content->save( $this->data );
     // Save Meta
     if( !empty( $content ) ) {
      $this->data['ContentMeta']['content_id'] = $this->Content->id;
      $this->Content->ContentMeta->save( $this->data );
      $this->Session->setFlash( 'Content has been saved.' );
      $this->redirect( array( 'action' => 'edit', $this->Content->id ) );
     }
    }
    

    这样做很好,可以向Content添加一个新条目,向ContentMeta添加一个条目。

    在更新数据(编辑模式)时,我遇到了一个小问题。内容条目的更新没有任何问题,但是在ContentMeta表中,每次更新都会创建一个新条目。

    以下是更新代码:

    $this->Content->id = $id;
    // Update Content
    $content = $this->Content->save( $this->data );
    // Update Meta
    if( !empty( $content ) ) {
        //Debugger::dump(print_r($this->data,true));
        $this->data['ContentMeta']['content_id'] = $this->Content->id;
        $this->Content->ContentMeta->save( $this->data );
        $this->Session->setFlash( 'Content has been updated.' );
        $this->redirect( array( 'action' => 'edit', $this->Content->id ) );
    }
    

    我确信是这个块中的一些逻辑错误导致了这种情况的发生。有人能告诉我哪里出错了吗?

    谢谢, 中东

    1 回复  |  直到 15 年前
        1
  •  2
  •   Nik Chankov    15 年前

    对我来说,数据数组中缺少$this->data['ContentMeta']['id']。由于此字段为空,因此蛋糕尝试创建新行。

    所以在表单中为ContentMeta添加一个隐藏的id字段。

    我认为另一件可以改进你的代码的事情是

    $this->Content->saveAll($this->data);
    

    这样,您将一次保存数据,而不是为每个模型保存两个save()调用。查看手册 the cookboook (并在文本中搜索saveAll)。