.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
14 人のユーザが現在オンラインです。 (14 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 14

もっと...

.
.リンク集

メイン
   CakePHP モデル(Model)
     MySQLエラーを捕捉する方法(重複チェック)
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
news
投稿日時: 2007-10-5 8:45
Cake 職人
登録日: 2007-4-4
居住地:
投稿: 1277
MySQLエラーを捕捉する方法(重複チェック)
CakePHPの関数は、あちこちでオーバーライド(書き換え)できるような仕組みが入っています。なので、フレームワークの標準動作と違う挙動が必要であれば、(フレームワークを書き換えずに)自分で直すことが可能です。

今回のアイデアは、$model->save を独自に書き換えて、「MySQLのエラーを捕捉する」というものです。具体的には、"unique(email),としたことにより生じる、 "Eメールアドレスが重複している場合に生じる"Duplicate Key"エラーが起きたら、そのエラーを表示させるには?というものです。

MySQLのエラーを表示したい、という状況はよくあることなので、これはかなり便利なTipsだと思います。

Detecting duplicate entries when updating
By Ben XO aka "ben-xo"


<?php
// First, we override save(). On a successful save(), 
    // afterSave() is called. But we want something to be 
    // called on a NOT-successful save().
    
function save($data null$validate true$fieldList = array()) {
        
$returnval parent::save($data$validate$fieldList);
        if(
false === $returnval) {
            
$this->afterSaveFailed();
        }
        return 
$returnval;
    }

    
// This is a stub which is called after a save has failed. 
    // You will override this in the model.
    
function afterSaveFailed() {
    }
?>



とすると、afterSaveFailed() というコールバック関数を使えるようになります。この中で、$db->lastError();を使うようです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .