我在所有内容中都有一个 status_id
字段,用于管理内容是否已发布等。我在 AppModel 中创建了该字段来处理所有过滤。
public function beforeFind($queryData) {
// Force all finds to only find stuff which is live
$queryData['conditions'][$this->alias.'.status_id'] = 1;
return $queryData;
}
效果很好,直到您进入管理路由,此时您想要查看所有项目,并且它们正在被过滤。有没有办法知道您是否处于 AppModel 的管理路由中?
最佳答案
我有过类似情况的经验,我使用“软删除”行为。
我的建议是检查 status_id
字段中是否已有条件,只有在没有条件时才进行设置。就像这样:
public function beforeFind($queryData) {
if (! isset($queryData['conditions'][$this->alias.'.status_id'])) {
// Force all finds to only find stuff which is live
$queryData['conditions'][$this->alias.'.status_id'] = 1;
} elseif ($queryData['conditions'][$this->alias.'.status_id'] == 'all') {
unset($queryData['conditions'][$this->alias.'.status_id']);
}
return $queryData;
}
这样,您就可以在默认情况下获得所需的功能,并且还可以在需要时在 status_id
字段上使用正常条件。
作为奖励,要忽略条件,就像您在管理路由中想要的那样,您可以使用以下命令:
$data = $this->paginate('YourModel', array('YourModel.status_id' => 'all'));
这基本上只是为了避免必须将所有状态 ID 作为“假”条件传递。
我就是这么做的。希望对您有所帮助。
关于cakephp - 调整 AppModel 中的 beforeFind(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8015831/