2017-11-07 8 views
0

新しく作成されたエンティティを保存しようとしています。 Saveはfalseを返しますが、検証エラーまたはSQLエラーは表示されず、例外もスローされません。CakePHP 3新しいエンティティの保存がエラーなしで失敗する

エンティティオブジェクトは、テーブルオブジェクトに対してnewEntity()を使用して作成され、次に移入されます。 save()を呼び出すと、falseを返します。これは)保存(後のエンティティオブジェクトのデバッグ出力で失敗します。

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 

このコードはシェルクラスから実行されます。しかし、同じクラスの別の関数では、非常によく似た保存がうまく動作するので、これは問題ではないと思います。

テーブルおよびエンティティクラスにはロジックやコールバックが含まれていません。

ありがとうございました!

編集:これは問題でした。エンティティを別のモデルに保存していました。これは例外をスローするべきではありませんか?

$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); 
} 
+1

にはコードが含まれています – Beginner

+0

データを保存するために使用しているコントローラも含めることができますか? – Aarrbee

+0

ねえ、コードを追加しました。もともとそれは含まれていませんでしたので、多くは起こっていないがうまくいけば、物事をより明確にするでしょう!私が言及したように、私は通常のコントローラではなくシェルクラスを使用していますが、それは問題のようには見えません。 – Simon

答えて

0

私はTickerValueエンティティを作成していましたが、実際にはそれをCurrenciesモデルに保存していたという問題がありました。

これは例外がスローされてしまうはずですが、Cakephpコミュニティの誰かがバグとして報告する必要があるかどうかを私が尋ねるほうがいいかもしれません。

関連する問題