想要更新attached_blog_id字段以设置NULL。提前谢谢。
foreach($this->Event->find('all', array('conditions' => array('Event.attached_blog_id' => $this->id()))) as $attached_blog)
$this->Event->query('UPDATE armo8427_events' . ' SET attached_blog_id = NULL' . ' WHERE id = ' . $attached_blog['Event']['id']);
答案 0 :(得分:1)
问题中的代码最好写成:
$events = $this->Event->find(
'all',
array(
'conditions' => array(
'Event.attached_blog_id' => $this->id()
)
)
);
foreach($events as $event) {
$this->Event->id = $event['Event']['id'];
$this->Event->saveField('attached_blog_id', null);
}
使用问题中的代码逻辑,根本不需要使用查询
问题中的逻辑可以表示为单个sql查询,而不是1 + n:
UPDATE
events
SET
attached_blog_id = NULL
WHERE
attached_blog_id = $id;
即。如果有100个链接的博客,使用foreach循环将发出101个查询,而在一个查询中这是相同的,无论受影响的行数是多少。
在CakePHP中执行此操作的最合适方法是使用updateAll:
$id = $this->id(); // From the question
$this->Event->updateAll(
array('Baker.attached_blog_id' => null), // the update
array('Baker.attached_blog_id' => $id) // conditions to match
);
应该为使用提供的模型方法无法实现的sql调用保留方法query
。