2017-02-17 1 views
5

Quelqu'un a-t-il déjà rencontré ce problème?CakePHP ne peut pas enregistrer dans la base de données Postgres, mais avec un retour réussi

Dans CakePHP, je l'ai.

$this->loadModel('BankBalance'); 
    $data = array("BankBalance"=> array(bla bla bla...); 
    $this->BankBalance->save($data); 
    $log = $this->BankBalance->getDataSource()->getLog(false, false); debug($log); 

et le debug me retourner ce

array(
'log' => array(
    (int) 0 => array(
     'query' => 'BEGIN', 
     'params' => array(), 
     'affected' => null, 
     'numRows' => null, 
     'took' => null 
    ), 
    (int) 1 => array(
     'query' => 'INSERT INTO bla bla bla...)', 
     'params' => array(), 
     'affected' => (int) 1, 
     'numRows' => (int) 1, 
     'took' => (float) 7 
    ), 
    (int) 2 => array(
     'query' => 'COMMIT', 
     'params' => array(), 
     'affected' => (int) 1, 
     'numRows' => (int) 1, 
     'took' => (float) 7 
    ) 
), 
'count' => (int) 3, 
'time' => (float) 14) 

En fait, la ligne n'a pas été inséré malgré un message retourné avec succès. Mais si j'ai copié le SQL généré et l'exécuter, il insère vraiment dans la table. J'ai aussi essayé d'utiliser saveMany, il n'a pas fait l'INSERTion mais quand même, retournez-moi un message réussi.

Il n'y a pas de journal d'erreur dans CakePHP. updateAll fonctionne correctement pour la mise à jour. Et maintenant je cherche le sql INSERT

Je ne peux même pas faire le -> enregistrer dans une simple table avec un seul champ (caractère variable (50)), pas de déclencheurs, rien. Renvoyez-moi le message de réussite, mais pas d'insertion de données physiques dans la table.

+0

Essayez de valider les données en premier, il pourrait y avoir une erreur. – urfusion

+0

@urfusion les données sont propres. comme je pourrais copier le SQL généré, puis coller dans pgAdmin et l'exécuter, pas de problème. – Fire

+0

Par validation, je veux dire valider par la validation du modèle cakephp en utilisant la méthode 'set' – urfusion

Répondre

0

Si vous souhaitez insérer des données, vous devez créer un nouveau en mettre

$this->BankBalance->create(); 

partout avant (le meilleur au début)

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

et mis

if($this->BankBalance->save($data)){ 
    $log = $this->BankBalance->getDataSource()->getLog(false, false); 
    debug($log); 
} 

au lieu de

$this->BankBalance->save($data); 
$log = $this->BankBalance->getDataSource()->getLog(false, false); debug($log); 

+0

La solution proposée est plus vers la structure appropriée des codes. Cela ne fonctionne toujours pas, avez-vous essayé de fonctionner dans votre environnement? Je travaille avec CakePHP & MYSQL depuis 5 ans, mais c'est la première fois que j'utilise CakePHP avec Postgres comme DB – Fire

+0

désolé je n'ai pas réalisé que c'était postgresql.Essayez '$ this-> BankBalance-> buildColumn();' au lieu de $ this-> BankBalance-> create(); ' – Tianyi

+0

J'ai ce message d'erreur" Erreur: SQLSTATE [42601]: Erreur de syntaxe: 7 ERREUR : erreur de syntaxe à ou près de "buildColumn" LINE 1: buildColumn^"après modification de -> create à -> buildColumn(). – Fire