新しく作成されたエンティティを保存しようとしています。 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);
}
にはコードが含まれています – Beginner
データを保存するために使用しているコントローラも含めることができますか? – Aarrbee
ねえ、コードを追加しました。もともとそれは含まれていませんでしたので、多くは起こっていないがうまくいけば、物事をより明確にするでしょう!私が言及したように、私は通常のコントローラではなくシェルクラスを使用していますが、それは問題のようには見えません。 – Simon