我在模型中有一个方法,做一个简单的保存(插入到数据库),首先它找到满足特定条件的任何用户,然后将某些信息插入另一个表给每个找到的用户,这里是代码:
function save_emails(){
App::import('Model', 'User');
App::import('Model', 'EmailSave');
$this->EmailSave = new EmailSave();
$this->User = new User();
$users = $this->User->find("all", array(
'conditions' => array(
'OR' => array(
array('User.user_type_id' => '4'),
array('User.user_type_id' => '1')
)
),
'fields' => array(
'username',
'email'
),
'recursive' => -1
));
foreach($users as $user){
//pr($user);
$to = $user['User']['email'];
$subject = $email_template['subject'];
$template = //calling a templating method;
$save_send['EmailSave']['created'] = date("Y-m-d H:i:s", time());
$save_send['EmailSave']['modified'] = date("Y-m-d H:i:s", time());
$save_send['EmailSave']['send_to'] = $to;
$save_send['EmailSave']['subject'] = $subject;
$save_send['EmailSave']['message'] = $template;
//pr($save_send);
$this->EmailSave->save($save_send);
//echo $to."<br />".$subject."<br />".$template."<br />".$cron_id."<br />";
}
}
这非常简单,我的意思是我没有使用任何复杂的方法,现在当我向用户运行find方法时:
$users = $this->User->find("all", array(
'conditions' => array(
'OR' => array(
array('User.user_type_id' => '4'),
array('User.user_type_id' => '1')
)
),
'fields' => array(
'username',
'email'
),
'recursive' => -1
));
它返回2个结果,当我尝试使用cake的pr方法打印结果时,它会打印出正确的结果,但是...如果我应用了save方法,它只会插入一个结果,如何可能吗?我已经逐行跟踪代码,它只是通过查找,问题是当我将它们保存到数据库时,它无法保存所有2个结果,请帮忙。
答案 0 :(得分:0)
http://book.cakephp.org/view/1031/Saving-Your-Data
创建或更新由模型的id字段控制。如果设置了
$Model->id
,则更新具有此主键的记录。否则会创建一条新记录。在循环中调用
save()
时,请不要忘记致电create()
。