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