CakePHP无法保存到Postgres数据库,但返回结果显示操作成功。

5

有人之前遇到过这个问题吗?

在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并运行它,它确实会插入到表中。 我也尝试过使用saveMany,它没有进行插入,但仍然返回了成功的消息。
在CakePHP中没有错误日志。 updateAll用于UPDATE操作正常工作。现在我正在寻找sql INSERT语句。
我甚至无法将-save插入到具有单个字段(字符变量(50))的简单表中,没有触发器或其他内容。 返回成功消息,但没有将物理数据插入表中。

尝试先验证数据,可能会有一些错误。 - urfusion
@urfusion 数据很干净。我可以复制生成的SQL,然后粘贴到pgAdmin中执行,没有问题。 - Fire
通过验证,我指的是使用set方法通过cakephp模型验证进行验证。 - urfusion
1
@urfusion $this->BankBalance->set($data); if ($this->BankBalance->validates()) { debug("a"); } else { // didn't validate logic $errors = $this->BankBalance->validationErrors; debug($errors); }它总是进入debug("a"),这意味着没有错误。还有什么建议吗? - Fire
2个回答

0

save($entity) 期望实体,而你提供了一个数组:

$this->loadModel('BankBalance');
$data = array("BankBalance"=> array(bla bla bla...);
$entity = $this->BankBalance->newEntity($data);
$result = $this->BankBalance->save($entity);

0
如果您想插入数据,需要通过put创建一个新的。
$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);

了解是否成功保存


提议的解决方案更加注重代码的正确结构。它仍然无法正常工作,您是否尝试在您的环境中运行?我已经使用CakePHP和MYSQL工作了5年,但这是我第一次使用带有Postgres作为数据库的CakePHP。 - Fire
抱歉,我没有意识到这是PostgreSQL。请尝试使用$this->BankBalance->buildColumn();而不是$this->BankBalance->create(); - Tianyi
我在将->create更改为->buildColumn()后遇到了以下错误信息:“Error: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "buildColumn" LINE 1: buildColumn ^”。 - Fire
这个 buildColumn() 函数是否代表将数据保存到 Postgres 数据库中? - Fire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接