【问题标题】:CakePHP 3 cannot save associated modelCakePHP 3 无法保存关联模型
【发布时间】:2015-10-04 21:34:30
【问题描述】:

我正在更新一些表中的一些日志数据。我不能只保存顶级 CoursesEmployees 的关联模型 ModulesEmployees。看不到缺少什么。

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

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    只有脏实体/属性被保存,你在那里所做的修改嵌套实体只会将该嵌套实体标记为脏,父实体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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2011-08-01
      • 2013-09-24
      • 1970-01-01
      • 2015-06-10
      相关资源
      最近更新 更多