CakePHP 3 新实体保存失败且没有错误

Posted

技术标签:

【中文标题】CakePHP 3 新实体保存失败且没有错误【英文标题】:CakePHP 3 new entity save fails with no error 【发布时间】:2017-11-07 01:39:53 【问题描述】:

我正在尝试保存一个新创建的实体。保存返回 false,但我看不到任何验证错误或 SQL 错误,也没有抛出异常。

实体对象是在表对象上使用 newEntity() 创建的,然后填充。然后当我调用 save() 时,它返回 false。这是save()失败后实体对象的调试输出:

object(App\Model\Entity\TickerValue) 
    'from_currency_id' => (int) 1,
    'to_currency_id' => (int) 1228,
    'created' => (int) 1509594561,
    'value' => (float) 0.00726931,
    '[new]' => true,
    '[accessible]' => [
        '*' => false
    ],
    '[dirty]' => [
        'from_currency_id' => true,
        'to_currency_id' => true,
        'created' => true,
        'value' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'TickerValues'

当我尝试在 phpMyAdmin 中手动插入这些值时,它工作正常。

这是桌子:

CREATE TABLE 'ticker_values' (
  'from_currency_id' int(11) NOT NULL,
  'to_currency_id' int(11) NOT NULL,
  'created' int(11) NOT NULL,
  'value' decimal(24,8) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我尝试打开查询日志记录,但只得到一堆这样的条目:

2017-11-07 01:13:29 Debug: duration=0 rows=0 ROLLBACK
2017-11-07 01:13:29 Debug: duration=0 rows=0 BEGIN

此代码从 Shell 类运行。但在同一类的另一个函数中,非常相似的保存工作正常,所以我认为这不是问题。

Table 和 Entity 类不包含任何逻辑或回调。

感谢您对此的任何帮助!

编辑:这是问题所在 - 我将实体保存到不同的模型。这不应该抛出异常吗??

$priceFieldName = 'price_'.strtolower($fromCurrency->symbol);
$tickerValues = TableRegistry::get('TickerValues');
$newValue = $tickerValues->newEntity();
$newValue->from_currency_id = intval($fromCurrency->id);
$newValue->to_currency_id = intval($toCurrency->id);
$newValue->created = intval($tickerItem->last_updated);
$newValue->value = (float)$tickerItem->$priceFieldName;
if( !$this->currencies->save( $newValue ) ) 
   debug( $newValue );

【问题讨论】:

包含您的代码 你能把你用来保存数据的控制器也包括进来吗? 大家好,刚刚添加了代码。最初没有包括它,因为没有太多的事情发生,但希望它能让事情变得更清楚!就像我提到的那样,我使用的是 Shell 类而不是普通控制器,但似乎不是问题所在。 糟糕,就是这样,我保存到错误的模型!这没有被标记为任何类型的错误或异常,这不是很奇怪吗? 【参考方案1】:

问题是我正在创建一个 TickerValue 实体,但实际上将它保存到货币模型中。

在我看来,这应该会导致抛出异常,但也许 Cakephp 社区中的某个人比我更能决定是否应该将其报告为错误。

【讨论】:

以上是关于CakePHP 3 新实体保存失败且没有错误的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp 3 先保存翻译。之后的原始实体

CakePHP 保存失败并设置了验证错误但为空

cakephp 没有将更新值保存到相关表,但没有错误

CakePHP 3:保存关联模型失败

CAKEPHP 3.x - 实体更新时出错 - 即使有值,也会声明缺少字段

CakePHP 1.3 未保存到数据库但 sql 语句正确且 insertID 正确增加