0

私は特定のfindBy呼び出し(afterFindを使用)をキャッチしようとしています:

$results が空 (または検索しようとしている値が存在しない) であるが、パラメーター値が別のテーブルで見つかった場合、$results が有効になるように変更されます。

一部のコントローラーアクションはこれを取得しました:

$this->User->findByUsername("Bingo"); // yes, username Bingo doesnt exist on users table

ユーザーモデル:

function afterFind($results, $primary){
    if(empty($results)) {
        if(in_array($findbyparameter, array("Bingo", "Bingo1", "Bingo2"))) {
            // modify $results
        }
    }
}

問題は、どうすれば $findbyparameter を取得できるのでしょうか?

ありがとう!すべての助けに感謝します!

4

2 に答える 2

0

これらの便利なメソッドは使用していませんが、次のようにモデル プロパティとして変数を渡すことができます。

//where you search 
$this->User->searchPhrase = "Bingo";
findByUsername($this->User->searchPhrase);

//Model
function afterFind($results, $primary){
    if(empty($results)) {
        if(in_array($this->searchPhrase, array("Bingo", "Bingo1", "Bingo2"))) {
            // modify $results
        }
    }
}

それは最も美しい方法ではありませんが、うまくいくと思います。afterFind メソッドで print_r($this) を試して、検索したフレーズをどこかに見つけられるかどうかを確認してください。条件の配列で渡されたと思います。

于 2012-09-23T22:19:25.077 に答える
0

おそらく、カスタム検索タイプが探しているものです。カスタム検索タイプには と の 2 つの状態がbeforeありafterます。

条件を設定する前に、データをチェックして必要に応じて変更した後にします。どちらの状態でも、クエリ オプションにアクセスできます。

カスタム検索の設定は 1.x と 2.x で少し異なります (使用しているバージョンについては言及していません)。そのため、本で詳細を調べることができます。

つまり、検索タイプを$findMethodsモデルのプロパティに追加してから、対応するメソッド名をモデルに追加します。カスタム検索タイプを「byUsername」と呼ぶとします

protected function _findByUsername($state, $query, $results = array()) {
    if ($state === 'before') {
        // add your condition to the query, 
        return $query;
    } elseif ($state === 'after') {
        // modify $results if you need to
        return $results;
    }
}

そして、あなたはそれを$this->User->find('byUsername', array('username' => $username));

のキーに追加$queryできるキー「ユーザー名」があります。どちらの状態でも、 にアクセスできます。conditions$query$query['username']

于 2012-09-23T22:28:13.270 に答える