関連する行が所有者オブジェクトによって呼び出されたときに beforeSave 関数を実行するようにしようとして問題が発生しました。この例では、Asset hasMany Versions のように Asset と AssetVersion を使用しました。
私の意図は、AssetVersion モデルで beforeSave を使用して、find を介して現在の最大のバージョン番号を見つけ、それを DB に入れることです。もちろん、コントローラーで saveAssociated を使用して asset_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 でデバッグがまったく表示されません。