CakePHP从父级更新子模型

时间:2015-07-26 22:22:41

标签: cakephp cakephp-2.3

我目前正努力通过CakePHP 2.3更新相关模型。我希望父模型处于非活动状态,子模型记录处于非活动状态。我的公司模型中有以下方法,它只更新父模型(而不是子模型)。实现这一目标的最佳方法是什么?我尝试将方法移动到子对象,但它没有任何区别。

class Company extends AppModel {
     public $hasMany = array(
        'CompaniesUser' => array(
            'className' => 'CompaniesUser'
        )
    );


function updateToInactive( $companyId ){
            $data = array(
                    array(
                    'Company' => array(
                      'id' =>$companyId, 
                      'active' => 0, 
                      'payment_active'=> 0
                    ),
                    'CompaniesUser' => array(
                      'company_id' =>$companyId, 
                      'active' => 0)
                    )
            );
            $this->saveAll($data);
}

}

我的公司用户模型看起来像这样:(属于公司)

class CompaniesUser extends AppModel {
public $belongsTo = array(
    'Company' => array(
        'className' => 'Company',
        'foreignKey' => 'company_id'
    )
);

1 个答案:

答案 0 :(得分:1)

我的$data数组对hasMany关系看起来不对。看起来应该更像这样: -

$data = array(
  'Company' => array(
    'id' =>$companyId, 
    'active' => 0, 
    'payment_active'=> 0
  ),
  'CompaniesUser' => array(
    array(
      'company_id' =>$companyId, 
      'active' => 0
    )
  )
);
$this->saveAssociated($data);

在保存相关数据时,最好使用saveAssociated()而不是saveAll()

<强>更新

除非您使用保存数据传递主键,否则上述内容不会更新现有的CompaniesUsers。您可以先保存公司,然后使用updateAll()更新相关公司的用户数据。如果您使用updateAll(),则需要记住escape the values being saved: -

// Update company
$data = array(
    'id' =>$companyId, 
    'active' => 0, 
    'payment_active'=> 0
);
$this->save($data);

// Update company users
$this->CompaniesUser->updateAll(
    array('CompaniesUser.active' => '"0"'),
    array('CompaniesUser.company_id' => '"' . $companyId . '"')
);