CakePHP:将数据保存到3个不同的模型

时间:2014-03-19 19:24:47

标签: php database cakephp

我目前正尝试使用单一表单将数据保存到3个不同的模型。他们是这样关联的:

Model 1 BelongsTo Model 2
Model 2 BelongsTo Model 3

add函数在Model 1 Controller中定义。我尝试使用我之前用来保存多个模型的输入名称的表示法,并且在那种情况下工作(模型1具有多种模型2,模型3,模型4,......类型的依赖关系)但这一次(这是一种级联关系)我使用了saveAll,saveAssociated,但没有任何作用。

它始终返回数据库错误"完整性约束违规:1452无法添加或更新子行:外键约束失败"。

它试图保存模型2中没有模型1的数据,与模型3和模型2相同。

我计算模型主键的下一个id并将其发送到视图,以便在保存数据之前将其分配给相关模型的外键字段,但是,我还是不确定我如何使用单个表单视图将数据首先保存到模型然后保存到另一个模型。

我希望我能正确解释自己。

感谢。

编辑:控制器添加功能(模型1 = Empleado,模型2 = Candidato,模型3 = Cv)

public function agregar() {

    $this->set('proyectos', $this->Proyecto->find('list'));
    $this->set('departamentos', $this->Departamento->find('list'));

    $lastCv = $this->Cv->query("SELECT cvs.id FROM cvs ORDER BY cvs.id DESC LIMIT 1;");
    $this->set('cv_id',$lastCv[0]['cvs']['id'] + 1);

    $lastCandidato = $this->Candidato->query("SELECT candidatos.id FROM candidatos ORDER BY candidatos.id DESC LIMIT 1;");  
    $this->set('candidato_id',$lastCandidato[0]['candidatos']['id'] + 1);

    if ($this->request->is('post')) {
        $this->Empleado->create();
        if ($this->Empleado->saveAll($this->request->data)) {
            $this->Session->setFlash('El empleado ha sido registrado con éxito','bien');
            return $this->redirect(array('action' => 'index'));
        }
        $this->Session->setFlash(__('No se pudo registrar el cargo'));
    }
}

//data array looks like this

$this->request->data = array(,
'Cv' => array(
    'id' => '36',
            //Rest of the Data
),
'Candidato' => array(
            'id' => '1'
    'cv_id' => '36',
     //Rest of the Data
),
'Empleado' => array(
    'candidato_id' => '1',
    //Rest of the Data
)

1 个答案:

答案 0 :(得分:0)

当写入print_r($ this-> request-> data)时,您的数据应如下所示:

[FirstModel] => Array
    (
        [data1] => test
        [data2] => india
        [data3] => maharashtra

    )
[SecondModel] => Array
    (
        [1] => Array
            (
                [data1] => dfds
                [data2] => 1
                [data3] => sdf
            )

    )

当您保存数据时,添加到行下方 $这 - > FirstModel->白水($这 - >请求 - >数据[ 'FirstModel']); $这 - > SecondModel->白水($这 - >请求 - >数据[ 'SecondModel']);