2012-03-15 6 views
1

私は現在、MySQLのインターフェースのためのドクトリンのDBALライブラリを使用していますが、現在、周辺の構造構築しています:Doctrine DBALを使用すると、更新の失敗をどのように判断できますか?

public function update(array $data, $id) 
{ 
    return $this->db->update($this->table, $data, array('id' => $id)); 
} 

もちろん、影響を受けた行数を返します。問題は、更新後に特定のアクションを実行することです。現在のシステムでは、レコードを編集(フォームのみを表示)してすぐにsaveを押すと、上記の更新関数の結果をチェックするのでエラーが返されます。これにより、サイトにエラーが表示されるだけでなく、他の「成功した更新」アクションが実行されなくなります。

更新プログラムが影響を受けた行の外側で実行されなかったかどうかを確認する方法はありますか?これを完全に無視して、更新プログラムが常に動作すると仮定することはできますか?トラッピング例外は、致命的なエラーを捕捉するのに十分であるか?

答えて

1

更新プログラムは常に動作すると見なすことができます。無効なフィールド名や制約違反などの大きな問題で例外がスローされます。これを自信を持って確認するために、いくつかのテストケースを作成することを検討してください。

update()メソッドではエスケープ処理が行われないので、データを整理するまで注意してください。

1

ほとんどの場合、更新は機能しますが、おそらくTransactionsを調べたいと思うかもしれません。何か問題が生じた場合に例外を処理し、DBの整合性を維持する最良の方法です。 PHPはreasons outlined in this answersの致命的なエラーから回復する従来の手段を提供していません。現行制度の下では

1

私は、「編集」(フォームのみ を示す)レコードにし、すぐにそれを保存ヒットした場合、私は

上の更新機能の 結果を確認するため、エラーを返します

$this->db->update()が影響を受ける行の数を返すことを忘れないでください(失敗した場合はfalse)。あなただけのオープン「編集」場合と「保存」をクリックし、データの変更および「影響を受けた行」は存在しません成功を返すか$this->db->update(...)で失敗するには0になります。あなたはfalse !==

if ($myModel->update($data, $id)) { 
    echo "success"; 
} 

を使用することができますし、あなたのmyModelで:

public function update(array $data, $id) 
{ 
    return false !== $this->db->update(...); 
} 
関連する問題