Cakephp 在行为don';无法正确保存数据
控制器:Cakephp 在行为don';无法正确保存数据,cakephp,before-save,Cakephp,Before Save,控制器: $data = array( 'ContentI18n' => array( 0 => array( 'title' => 'first', 'author' => 'first',
$data =
array(
'ContentI18n' =>
array(
0 =>
array(
'title' => 'first',
'author' => 'first',
'source' => 'sgfsdfrst',
'lang' => 'fa',
),
),
'Content' =>
array(
'publish' => 1,
'type' => 3,
'pages' => 8,
'volume' => 7,
'modified' => '2012-05-27 14:16:37',
'created' => '2012-05-27 14:16:37',
'lang' => 'fa',
),
);
$this->Content->create();
$this->Content->saveAll($data);
型号:
public $hasMany = array(
'ContentI18n' => array(
'className' => 'ContentI18n',
)
);
在行为中保存函数之前:
public function beforeSave(Model $model) {
// Define the new Translate model
App::uses($model->name . 'I18n', 'Model');
$varI18n = $model->name . 'I18n';
$modelI18n = new $varI18n;
foreach ($model->data[$model->name] as $key => $data) {
if (!in_array($key, $this->setting))
$modelData[$model->name][$key] = $data;
else
$modelData[$model->name . 'I18n'][0][$key] = $data;
}
$modelData[$model->name . 'I18n'][0]['lang'] = $model->locale;
$modelData[$model->name]['lang'] = $model->locale;
$model->data = $modelData;
//pr($model->data);
return TRUE;
}
当直接保存时,一切似乎都是因为它是用
saveAll
保存的。但是当我在behavior中使用相同的数据结构时,没有任何错误。我发现beforeSave回调不会由saveAll触发。为了在saveAll之前执行一些代码,我们必须重写模型中的saveAll函数
public function saveAll($data, $options = array()) {
/*
your code you want execute before saving...
*/
parent::saveAll($data, $options);
}
对于其他保存方法,如saveMany、saveAssociated、,。。。在它们触发之前保存触发器