我目前正努力通过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'
)
);
答案 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 . '"')
);