CakePHP 3无法保存关联模型

时间:2015-10-04 21:34:31

标签: cakephp cakephp-3.0

我正在更新某些表中的一些日志数据。我无法保存关联模型ModulesEmployees只有顶级CoursesEmployees。不知道遗失了什么。

CoursesEmployeeTable.php

    $this->hasMany('ModulesEmployees', [
        'dependent' => true,
        'foreignKey' => 'courses_employee_id'
    ]);

ModulesSlidesController.php

$this->loadModel('CoursesEmployees');

$CoursesEmployee = $this->CoursesEmployees
     ->get(65, [
           'contain' => ['ModulesEmployees'],
           'where' =>[
                ['ModulesEmployees.id' => 19]
            ]
        ]);

if (!$CoursesEmployee['modules_employees'][0]['started_on']) {
    $CoursesEmployee['modules_employees'][0]['started_on'] = date('Y-m-d H:i:s');
};

$this->CoursesEmployees->save($CoursesEmployee, ['associated' => ['ModulesEmployees']]);

退回的对象

CoursesEmployee(array)
id65
employee_id3
course_id1
course_module_id1
completed_modules0
current_slide0
cid0
date_started(array)
progress0
modified(array)
created(array)
completed(false)
date_completed(null)
deleted(null)
modules_employees(array)
    0(object)
        id19
        courses_employee_id65
        course_module_id1
        started_on2015-10-04 21:00:10
        completed_on(null)
        completed(false)
        deleted(null)
[new](false)
[accessible](array)
[dirty](empty)
[original](empty)
[virtual](empty)
[errors](empty)
[repository]CoursesEmployees

1 个答案:

答案 0 :(得分:4)

只保存脏实体/属性,并且您在那里修改嵌套实体,只会将嵌套实体标记为脏,父实体CoursesEmployee将保持不变,因此保存过程不会触及关联。

当不使用自动将父实体属性标记为脏的修补机制时,您必须自己执行此操作。

来自文档的引用:

  

[...]

     

如果您在构建之后构建或修改关联数据   您必须将关联属性标记为已修改的实体   with dirty():

$company->author->name = 'Master Chef';
$company->dirty('author', true);

<强> Cookbook > Database Access & ORM > Saving Data > Saving Associations

因此,在您的情况下,modules_employees属性需要标记为脏,例如

$CoursesEmployee->dirty('modules_employees', true);