您认为创建请求的过程的最佳方式是什么?如果数据库中存在任何现有ID,则更新如果不创建新ID。
我正在使用类似下面的东西,它似乎有效,但有更好的方法吗?
$id = $this->User->findByFacebookId($facebook);
if($id){
$this->User->set(array(
'facebook_id' => $facebook,
'longitude' => $longitude,
'latitude' => $latitude,
'firstname' => $firstname,
'surname' => $surname
));
$this->User->id = $id['User']['id'];
$this->User->save($this->data);
答案 0 :(得分:3)
Yup,CakePHP基本上默认执行此操作。如果您的数据没有id
字段,则会发出INSERT
语句,而如果有id
字段则会发出UPDATE ... WHERE ID = ?
。
只是为了说明如何简单地完成此操作,下面是一种在不调用Model::set()
或更新Model::id
属性的情况下执行相同操作的方法:
// get existing record (so we can get value of `id` field)
$existing = $this->User->findByFacebookId($facebook);
// if record exists, map data to correct record `id`
if ($existing) {
$this->data['User']['id'] = $existing['User']['id'];
}
// save data to table (`id` determines if INSERT or UPDATE)
$this->User->save($this->data);