我正在更新某些表中的一些日志数据。我无法保存关联模型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
答案 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);