2015-10-04 113 views
1

我正在更新某些表中的某些日志数据。我无法在关联模型ModulesEmployees上保存最高级别的CoursesEmployees。不能看到缺少的东西。CakePHP 3无法保存关联的模型

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 

回答

3

只有肮脏的实体/属性被保存,和你在做什么有,修改一个嵌套的实体,只会将该嵌套实体标记为肮脏的父亲实体y,CoursesEmployee将保持不变,因此保存过程不会触及关联。

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

报价:

[...]

如果你正在构建或修改关联数据构建 实体后,你将不得不标记关联属性与脏修改 ():

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

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

所以你的情况它是modules_employees属性需要被标记为脏,像

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

谢谢你,现在更清晰 –