2017-02-17 31 views
5

С кем-либо сталкивается эта проблема раньше?CakePHP не может сэкономить в базе данных Postgres, но с успешным возвратом

В CakePHP у меня такое.

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

и отлаживать вернуть мне эту

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) 

В самом деле, строка не была вставлена, несмотря на сообщения об успешном возвращенного. Но если я скопировал сгенерированный SQL и запустил его, он действительно вставляет INSERT в таблицу. Я попытался использовать saveMany, но он не сделал INSERTION, но все же вернул мне успешное сообщение.

В CakePHP нет ошибок. updateAll отлично работает для UPDATE. И теперь я ищу sql INSERT

Я не могу даже сделать -> сохранить в простой таблице с одним полем (символ меняется (50)), никаких триггеров, ничего. Верните мне сообщение о успехе, но никакие физические данные не вставляются в таблицу.

+0

Сначала проверьте данные, возможно возникновение ошибки. – urfusion

+0

@urfusion данные чистые. поскольку я мог бы скопировать сгенерированный SQL, а затем вставить в pgAdmin и выполнить его, без проблем. – Fire

+0

Подтверждаю, что подтверждаю подтверждение валидации модели cakephp с использованием метода 'set' – urfusion

ответ

0

Если вы хотите вставить данные, необходимо создать новый, поставил

$this->BankBalance->create(); 

где-нибудь раньше (лучше в начале)

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

и положить

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

вместо

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

, чтобы узнать, успешно сэкономили

+0

Предлагаемое решение касается большей структуры кодов. Он все еще не работает, вы пытались работать в своей среде? Я работаю с CakePHP и MYSQL в течение 5 лет, но это мой первый раз, используя CakePHP с Postgres как DB – Fire

+0

жаль, что я не понял, что это postgresql.Попробуйте '$ this-> BankBalance-> buildColumn();' вместо '$ this-> BankBalance-> create();' – Tianyi

+0

У меня возникло это сообщение об ошибке «Ошибка: SQLSTATE [42601]: Синтаксическая ошибка: 7 ОШИБКА : синтаксическая ошибка в или рядом с "buildColumn" LINE 1: buildColumn^"после изменения из -> create to -> buildColumn(). – Fire