在我的模型中,我们将其称为“问题”,我有“活动”字段(TINYINT)。这个想法是,该特定模型中只有一个条目可以是活动的。因此,当我通过选中“活动”复选框更新一个条目时,此条目应变为活动状态,而另一个条目应变为非活动状态(我的意思是之前已激活的条目)。知道我应该使用什么查询吗?
答案 0 :(得分:2)
某种切换行为。
您编写的此行为会使模型$actsAs = array('Toggable', array('field'=>'active'));
并在你的afterSave挂钩中进行updateAll调用,将所有活动的重置为非活动状态(当然除了当前的id)
这将是最干净的方法。 当然,你可以随时使用模型钩子来制作一个快速而又脏的。
答案 1 :(得分: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'));
}
}
它正在发挥作用,但我想这不是“最干净的方法”。有关如何简化它的提示吗?