Cakephp 2.1 手动保存关联对象

Posted

技术标签:

【中文标题】Cakephp 2.1 手动保存关联对象【英文标题】:Cakephp 2.1 Saving associated objects Manually 【发布时间】:2012-04-11 07:49:56 【问题描述】:

Mycakephp 版本为 2.1.1。

我正在尝试使用 saveAll() 函数手动保存关联模型

型号

员工有一个地址 员工所属部门

所以表

员工(名字、姓氏、年龄、性别、部门 ID)

地址(first_line,second_line,city,state,employee_id)

现在员工创建 add.ctp 有一个接收员工和地址输入的表单

我知道

$this->Employee->saveAll($this->request->data);

这将保存模型,但是 我想手动保存关联

我正在浏览官方 cakephp 文档here,我尝试过类似的方法

        $this->Employee->saveAll($data, array(
            'fieldList' => array(
            'Employee' => array('first_name','last_name','age','sex','department_id'),
            'Department' => array('first_line', 'second_line','city','state','employee_id')
            )
        ));

它不工作,并引发以下错误

注意(8):未定义变量:data [APP\Controller\EmployeesController.php,第 118 行]

警告(2):array_keys() 期望参数 1 为数组,给定 null [CORE\Cake\Model\Model.php,第 1996 行]

我是 cakephp 初学者。请帮我。

$this->request->数据:数组

(

[Employee] => Array
    (
        [first_name] => Jack
        [last_name] => Robert
        [age] => 32
        [sex] => 0
        [Department] => Development
    )

[Address] => Array
    (
        [first_line] => HSR Layout
        [second_line] => 1st Cross
        [city] => Najem
        [state] => Barel
    )

[Department] => Array
    (
        [id] => 3
    )

)

【问题讨论】:

你能从add()方法中展示更多吗?你在哪里定义$data 你能告诉我如何定义 $data 我不知道吗 如果你不定义$data,你应该使用$this->request->data,这样你就得到了你的表单的数据。 我试过了,还是不行 $this->Employee->saveAll($this->request->data, array('fieldList' => array('Employee' => array('first_name','last_name', 'age','sex','department_id'), 'Department' => array('first_line', 'second_line','city','state','employee_id') )); 【参考方案1】:

尝试在fieldList 参数中只使用一个数组:

$this->Employee->saveAll($this->request->data, array('fieldList' => array('Employee.first_name', 'Employee.last_name', 'Employee.age', 'Employee.sex', 'Department.first_line', 'Department.second_line', 'Department.city', 'Department.state', 'Department.employee_id')));

根据手册,fieldList 需要“您希望允许保存的字段数组”。我认为不接受多维数组。

$this->request->data是你表单的所有字段,你可以用debug($this->request->data)查看。

【讨论】:

不保存员工和部门 你试过没有第二个参数吗?只是$this->Employee->saveAll($this->request->data)?并检查了$this->request->datadebug() 它适用于 $this->Employee->saveAll($this->request->data) 好的,您正在尝试保存表单数据中不存在的字段。检查数据库关系和表单字段,我觉得有问题。【参考方案2】:

经过一番研究,我找到了。

       $data = array(
         'Employee' => array(
         'first_name' => $this->request->data['Employee']['first_name'],
         'last_name'=>$this->request->data['Employee']['last_name'],
         'age'=>$this->request->data['Employee']['age'],
         'sex'=>$this->request->data['Employee']['sex'],
         'department_id'=>$this->request->data['Department']['id']
        ),
         'Adress' => array(
         'first_line' => $this->request->data['Adress']['first_line'],
         'second_line'=>$this->request->data['Adress']['second_line'],
         'city'=>$this->request->data['Adress']['city'],
         'state'=>$this->request->data['Adress']['state']
        )

    );


            $this->Employee->saveAll($data, array('deep' => true))

这样就可以了。

【讨论】:

以上是关于Cakephp 2.1 手动保存关联对象的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 2.1 - 保存(和创建)多个连接模型和关联模型

CakePHP:获取登录用户的关联对象

Cakephp - 条件保存

Cakephp 3 保存关联属于ToMany

HABTM 关联未保存 - cakephp

CakePHP 3:保存关联模型失败