2015-02-05 6 views
1

Я пытаюсь обновить профиль в базе данных, не передавая идентификатор профиля в качестве параметра, а вместо обновления добавляю новую строку. Я попытался использовать getLastInsertId(), но это не сработало.Вставка новой строки вместо обновления

public function editProfile(){ 

    if (isset($this->data)){ 

     $Client = $this->Client->find('first', array(
     'fields' => array('email','username','first_name','surname','country','phone_prefix','phone'), 
     'conditions' => array(
      'Client.email' => $this->request->query['email'], 
      'Client.client_type' => $this->request->query['client_type'] 
      ), 
     ) 
    ); 


if($this->request->is('get')) { 

     if($data = $this->Client->save($this->request->query,array('first_name','surname','country','phone_prefix','phone'))) 
     { 
      $this->Client->id = $this->Client->getLastInsertId(); 

ответ

1

Похоже, вы пытаетесь обновить запись в своей модели клиента на основе адрес электронной почты и тип клиента, потому что (я полагаю) вы не знаете идентификатор.

Попробуйте изменить свой код, чтобы получить идентификатор на основе информации, которую вы have-

public function editProfile(){ 

if($this->request->is('get')) { 
    if (isset($this->data)){ 

    $conditions = array('conditions' => array(
      'email' => $this->request->query['email'], 
      'client_type' => $this->request->query['client_type'] 
     )); 
    $this->Client->id = $this->Client->field('id', $conditions); 

    if($this->Client->save($this->request->query,array('id', 'first_name','surname','country','phone_prefix','phone'))) 
    { 
     $this->setFlash('success'); 
    }else{ 
     $this->setFlash('fail'); 
    } 
    } 
} 
0

Без id, торт предполагает, что вы добавляете нового Клиента. Чтобы обновить с помощью сохранения, вам нужно указать, какой Client.id каким-то образом обновить. Есть ли причина, по которой вы не можете предоставить Client.id? Обычный подход заключается в том, чтобы Client.id присутствовал в скрытом вводе вашего вида редактирования, который затем можно передать в действие редактирования ...

+0

Я добавил эту линию, и она работала. $ this-> request-> query ['id'] = $ Client ['Client'] ['id.'] Спасибо за ответ – abcy122

1

Глядя на код, он, кажется, у вас есть два возможных ключей:

  1. Клиент электронной почты
  2. Последний сохраненный идентификатор

Во-первых, использование последнего сохраненного идентификатора кажется очень хрупким - h Вы можете быть уверены, что это всегда будет запись, которую вы хотите обновить? Лучше избегать такого подхода.

Однако, если у вас есть электронная почта пользователя вы можете использовать следующий метод:

$client = $this->Client->findByEmail($this->request->data['Client']['email']); 
$id = $client['Client']['id']; 

Теперь у Вас есть идентификатор записи клиента доступного для использования в воротах. Что-то вроде:

$data = array(); 
$data['Client']['id'] = $id; 
$data['Client']['fieldFromForm'] = $this->data['Client']['fieldFromForm']; 

$this->Client->save($data); 

...