Php 在关联行上未调用beforeSave

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

当所有者对象调用关联行时,我在尝试让关联行执行beforeSave函数时遇到问题。对于这个例子,我使用了Asset和AssetVersion,因为在一个资产中有许多版本

我的意图是在AssetVersion模型中使用beforeSave,通过find查找当前最高版本号,然后将其放入数据库。当然,我不能在控制器中使用saveAssociated并捕获资产id,然后在AssetVersion模型上调用save,但这并不是正确的方法。beforeSave在Asset中调用,但不在AssetVersion中调用

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,这可能是一个实际的错误或您所说的预期行为