2013-08-12 3 views
2

J'ai une ancienne base de données dans PostgreSQL avec clé primaire multiple.Enregistrer sans obtenir lastInsertId

Lorsque je tente enregistrer les informations dans ces tableaux, une erreur est survenue parce que CakePHP essayant d'obtenir le lastInsertId. Parce que, comme nous le savons, CakePHP ne prend pas en charge clé primaire multiple. Donc, je veux savoir, comment puis-je désactiver cette fonctionnalité/option?

J'ai essayé ceci, mais ne fonctionne pas comme prévu.

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

La solution ci-dessus, fonctionne, donc j'approuve la réponse. Mais, je veux vraiment une explication de comment puis-je désactiver la fonction lastInsertId dans CakePHP dans certains cas.

+0

question désolé n'est pas clair, s'il vous plaît pouvez-vous expliquer peu plus –

+0

@ Er.KT Je révisais la question, voyez maintenant s'il vous plaît. –

Répondre

4

Utilisez le code suivant

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); 
     } 
    } 

} 

pour plus d'informations regarder ici http://mrphp.com.au/blog/multiple-primary-keys-cakephp#.UhxzGD90klQ

ou cette http://miljenkobarbir.com/using-multiple-column-primary-key-in-cakephp-cascade-delete-problem/

+0

Je vais tester mon ami et vous envoyer un commentaire plus tard. Merci. –

+0

Fonctionne si j'informe le '$ primaryKey = user_id' aussi. Quoi qu'il en soit, merci. C'est du travail pendant un moment. –

Questions connexes