2017-02-17 44 views
5

Czy ktoś napotyka ten problem wcześniej?CakePHP nie może zapisać do bazy danych Postgres, ale z powodzeniem powrócić

W CakePHP, mam to.

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

i debugowania powrócić mi ten

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) 

W rzeczywistości rząd nie został wstawiony mimo udanej wiadomości zwrócone. Ale jeśli skopiowałem wygenerowany kod SQL i uruchomiłem go, to naprawdę WSTAWIĆ do tabeli. Próbowałem również użyć saveMany, ale nie wykonałem INSERTion, ale mimo to zwróciłem wiadomość o pomyślnym zakończeniu.

Brak rejestru błędów w CakePHP. updateAll działa poprawnie dla UPDATE. A teraz szukam sql INSERT

Nie mogę nawet zrobić -> zapisać w prostej tabeli z jednym polem (charakter zmienny (50)), bez wyzwalaczy, nic. Zwróć mi wiadomość o powodzeniu, ale nie wstawiaj danych fizycznych do tabeli.

+0

Spróbuj najpierw sprawdzić dane, może to oznaczać błąd. – urfusion

+0

@urfusion dane są czyste. ponieważ mogłem skopiować wygenerowany SQL, a następnie wkleić do pgAdmin i wykonać go, bez problemu. – Fire

+0

Przez walidację rozumiem walidację przez walidację modelu cakephp przy użyciu 'set' method – urfusion

Odpowiedz

0

Jeśli chcesz wstawić dane, trzeba utworzyć nowy przez umieścić

$this->BankBalance->create(); 

nigdzie wcześniej (najlepiej na początku)

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

i umieścić

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

zamiast

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

wiedzieć, czy zapisanie zakończyło się pomyślnie

+0

Proponowane rozwiązanie polega raczej na właściwej strukturze kodów. Nadal nie działa, czy próbowałeś uruchomić w swoim środowisku? Pracuję z CakePHP i MYSQL przez 5 lat, ale to jest mój pierwszy raz używając CakePHP z Postgresem jako DB – Fire

+0

Niestety nie zdawałem sobie sprawy, że to postgresql.Wypróbuj '$ this-> BankBalance-> buildColumn();' zamiast '$ this-> BankBalance-> create();' – Tianyi

+0

Mam następujący komunikat o błędzie "Błąd: SQLSTATE [42601]: Błąd składniowy: 7 BŁĄD : błąd składni przy lub w pobliżu "buildColumn" LINE 1: buildColumn^"po zmianie z -> create na -> buildColumn(). – Fire