Php 在关联行上未调用beforeSave
当所有者对象调用关联行时,我在尝试让关联行执行beforeSave函数时遇到问题。对于这个例子,我使用了Asset和AssetVersion,因为在一个资产中有许多版本 我的意图是在AssetVersion模型中使用beforeSave,通过find查找当前最高版本号,然后将其放入数据库。当然,我不能在控制器中使用saveAssociated并捕获资产id,然后在AssetVersion模型上调用save,但这并不是正确的方法。beforeSave在Asset中调用,但不在AssetVersion中调用Php 在关联行上未调用beforeSave,php,cakephp-2.0,has-many,before-save,Php,Cakephp 2.0,Has Many,Before Save,当所有者对象调用关联行时,我在尝试让关联行执行beforeSave函数时遇到问题。对于这个例子,我使用了Asset和AssetVersion,因为在一个资产中有许多版本 我的意图是在AssetVersion模型中使用beforeSave,通过find查找当前最高版本号,然后将其放入数据库。当然,我不能在控制器中使用saveAssociated并捕获资产id,然后在AssetVersion模型上调用save,但这并不是正确的方法。beforeSave在Asset中调用,但不在AssetVersio
class AssetsController extends AppController
{
public function add()
{
if (!$this->request->is('post'))
return false;
$md5 = md5(microtime(true));
$data['Versions'] = array(
array(
'md5' => $md5,
)
);
debug($data);
$this->Asset->create();
if ($this->Asset->saveAll($data))
{
die('boom');
$this->Session->setFlash(__('The asset has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The asset could not be saved. Please, try again.'));
}
}
}
class Asset extends AppModel
{
public $hasMany = array(
'Versions' => array(
'className' => 'AssetVersions'
)
);
public function beforeSave($options = array())
{
if(!isset($this->data['Asset']['created_id']))
$this->data['Asset']['created_id'] = CakeSession::read('Auth.User.id');
$this->data['Asset']['updated_by'] = CakeSession::read('Auth.User.id');
return parent::beforeSave();
}
}
class AssetVersion extends AppModel
{
public $belongsTo = array(
'Asset'
);
public function beforeSave($options = array())
{
debug('I dont get called at all');
debug($this->data);
die();
}
}
你知道我没有做对什么吗?我一直在尝试调试CakePHP本身中调用的内容,到目前为止,我已经证明在保存相关数据时会调度事件,但我在AssetVersion中根本看不到我的调试。这可能是CakePHP 1.3,但我认为
beforeSave
在saveAll
期间不会在相关模型上触发beforeSave
。看来不对,我知道。但我隐约记得一个类似的问题。为了补充这一点,我也尝试了saveAssociated,在这两种情况下,它都运行saveMany,然后在AppModel上保存之前发送,而不是AssetVersion,这可能是一个实际的错误或您所说的预期行为