0

$this->save()以前に作成した古いコードを再検討しました。ここでは、aが成功したかどうかを確認するためのif-elseステートメントがあります。ただし、save()入力が何であるか、データがデータベースに正常に保存されたかどうかに関係なく、配列を返すようです。

これは、という名前のテーブルの例であり、または:productという名前の列はありません。idddout_of_stocksdsd

$temp = array();
$temp['Product']['iddd'] = '1';
$temp['Product']['out_of_stocksdsd'] = '1';           
$q = $this->save($temp);            
debug($q);

debug($q)以下を返します。配列には、テーブルに存在するインデックスが含まmodifiedれていることに注意してください。createdproduct

Array
(
    [Product] => Array
    (
        [iddd] => 1
        [out_of_stocksdsd] => 1
        [modified] => 2013-02-07 21:28:51
        [created] => 2013-02-07 21:28:51
    )

)

上記はデータベース内の何も更新せず、ご覧のとおり、それが機能したかどうかについての表示はありません。$this->save()では、正常に実行されたかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

1

$this->Model->save()が成功したかどうかを確認する方法を知っている最善の方法は、 を使用することif/elseです。データが正常に保存されない場合、返されて変数に含まれる必要があるの$qは booleanだけFALSEです。

また、CakePHP/PHP は保存される配列の内容を気にしないことに注意してください。Db テーブルに 5 つの列 (id、name、content、created、modified) がある場合、cake はそれらの値のみを考慮します (検証に依存します)。配列にさらに列 (idddddd、nameeeeee、anothercolum など) を追加すると、それらは単にスキップされ、エラーはスローされません。

ここでのコードの書き方では、ID を渡さないため、何も保存されません。コマンドは成功しますが、エントリが MySQL に到達すると魔法のように消えます。テーブルに新しいエントリを作成する場合は、 を呼び出す$this->Model->create()前に を呼び出す必要があります$this->Model->save()。ただし、テーブル内のエントリを更新する場合を除き、ID を渡すか、ID を割り当てる必要があります。$this->Model->id = 1;

于 2013-02-08T04:35:51.003 に答える