我正在尝试保存新创建的实体。保存返回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 );
}
答案 0 :(得分:0)
问题是我正在创建一个TickerValue实体,但实际上是将它保存到Currencies模型中。
在我看来,这应该会导致异常被抛出,但也许Cakephp社区中有人比我更好地调用是否应该将其报告为错误。