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

Posted

技术标签:

【中文标题】CakePHP:将数据保存到 3 个不同的模型【英文标题】:CakePHP: Save data to 3 different models 【发布时间】:2014-03-19 19:24:46 【问题描述】:

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

模型 1 属于模型 2 模型 2 属于模型 3

add 函数在 Model 1 控制器中定义。我尝试使用以前用于保存多个模型的输入名称的表示法,并且在这种情况下确实有效(模型 1 有许多模型 2、模型 3、模型 4,... 某种依赖关系)但这次(这是一种级联关系)我使用了 saveAll、saveAssociated,但没有任何效果。

它总是返回一个数据库错误“完整性约束违规:1452 无法添加或更新子行:外键约束失败”。

这就像它试图在没有模型 1 的情况下保存模型 2 中的数据,与模型 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
)

)

【问题讨论】:

您的问题有点令人困惑,无需查看代码。使用您用于保存的控制器功能和视图更新您的问题:) 视图中的表格超长T.T...我加个控制器代码 那你能举个例子来说明你在$this->request->data 上的帖子吗?如果太多,请删除字段信息并保留结构和 id 引用。 (顺便说一句,你不应该使用 query() 来处理你可以用 find 做的简单查询) Ehm...我不希望你以错误的方式理解这个,我什至不知道我是否可以通过这里做到这一点,但我目前正在做一个项目而且我对 cakephp 还很陌生。你有没有机会通过更直接的沟通渠道帮助我? (我做了一些事情,所以我没有那么迷茫):| 我现在快下班了,你还没有足够的代表在聊天中交谈。但就像你说的,你似乎并没有那么迷茫:) 发布var_dump($this->request->data) 的结果,我相信有人会提供帮助。 【参考方案1】:

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

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

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

    )

当您保存数据时添加以下行 $this->FirstModel->saveAll($this->request->data['FirstModel']); $this->SecondModel->saveAll($this->request->data['SecondModel']);

【讨论】:

以上是关于CakePHP:将数据保存到 3 个不同的模型的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP - 如何在保存时将关联记录添加到模型中?

CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中

Cakephp - 条件保存

使用 Cakephp model::save() 将数据保存到不同的数据库表

CakePHP 使用 3 个带有 saveAll 的模型

Cakephp:使用`saveAssociated()`时如何将`parent_id`保存到基于树的模型中?