2013-08-12 2 views
2

У меня есть старая база данных в PostgreSQL с несколькими первичными ключами.Сохранить, не получив lastInsertId

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

Итак, я хочу знать, как я могу отключить эту функцию/параметр?

Я пробовал это, но не работает должным образом.

$this->OrderDrinkBase->saveAll(
    $drinkBases, 
    array('callbacks' => false, 'validate' => false) 
); 

Решение выше, работает, так что я одобрил ответ. Но я действительно хочу объяснить, как я могу отключить функцию lastInsertId в CakePHP в некоторых случаях.

+0

извините вопрос не ясно, пожалуйста, можете ли вы объяснить немного больше –

+0

@ Er.KT я пересмотрел вопрос, смотрите сейчас, пожалуйста. –

ответ

4

Используйте следующий код

class GroupToUser extends AppModel { 

    var $name = 'GroupToUser'; 
    var $useTable = 'groups_users'; 

    var $primaryKeyArray = array('user_id','group_id'); 

    function exists($reset = false) { 
     if (!empty($this->__exists) && $reset !== true) { 
      return $this->__exists; 
     } 
     $conditions = array(); 
     foreach ($this->primaryKeyArray as $pk) { 
      if (isset($this->data[$this->alias][$pk]) && $this->data[$this->alias][$pk]) { 
       $conditions[$this->alias.'.'.$pk] = $this->data[$this->alias][$pk]; 
      } 
      else { 
       $conditions[$this->alias.'.'.$pk] = 0; 
      } 
     } 
     $query = array('conditions' => $conditions, 'fields' => array($this->alias.'.'.$this->primaryKey), 'recursive' => -1, 'callbacks' => false); 
     if (is_array($reset)) { 
      $query = array_merge($query, $reset); 
     } 
     if ($exists = $this->find('first', $query)) { 
      $this->__exists = 1; 
      $this->id = $exists[$this->alias][$this->primaryKey]; 
      return true; 
     } 
     else { 
      return parent::exists($reset); 
     } 
    } 

} 

для получения дополнительной информации здесь смотрите http://mrphp.com.au/blog/multiple-primary-keys-cakephp#.UhxzGD90klQ

или это http://miljenkobarbir.com/using-multiple-column-primary-key-in-cakephp-cascade-delete-problem/

+0

Я проведу своего друга и отправлю вам отзыв позже. Благодарю. –

+0

Работает, если я также сообщаю '$ primaryKey = user_id'. В любом случае, спасибо. Это работа на некоторое время. –

Смежные вопросы