0

私のモデルでは、それを「質問」と呼びましょう。「アクティブ」フィールド(TINYINT)があります。アイデアは、その特定のモデルの1つのエントリのみをアクティブにできるということです。したがって、「アクティブ」チェックボックスをオンにして一方のエントリを更新すると、このエントリはアクティブになり、もう一方のエントリは非アクティブになります(つまり、以前にアクティブだったエントリ)。どのクエリを使用する必要がありますか?

4

2 に答える 2

2

たとえば、ある種のトグル動作。あなたが書くこの振る舞いはモデルを作ります$actsAs = array('Toggable', array('field'=>'active'));

そして、afterSaveフックでupdateAll呼び出しを行い、すべてのアクティブなものを非アクティブにリセットします(もちろん現在のIDを除く)

それが最もクリーンなアプローチです。もちろん、モデルフック自体を使用して、いつでも手っ取り早いものを作成できます。

于 2012-08-30T09:01:13.790 に答える
0

どうすればいいのかわかりません。それは私の現在の知識を少し上回っています:)

これは私がこれまでにそれを理解した方法です:

function admin_edit($id = null) {
        $this->Question->id = $id;

        if (empty($this->data)) {
            $this->data = $this->Question->read();
        } else {

            if ($this->Question->save($this->data)) {
                $active = $this->data['Question']['active'];
                $total = $this->Question->find('count');
                $i=1;

                if ($i == '1') {
                    while($active <= $total){
                        $this->Question->query("UPDATE questions SET active = '0'");
                        $i++;
                    }

                    $this->Question->query("UPDATE questions SET active = '1' WHERE id = '$id'");
                }

                $this->redirect(array('action' => 'index'));
            }

        }

そしてそれは機能していますが、それは「最もクリーンなアプローチ」ではないと思います。その後それを単純化する方法のヒントはありますか?

于 2012-08-30T11:18:46.943 に答える