cakephp - 调整 AppModel 中的 beforeFind()

标签 cakephp cakephp-2.0

我在所有内容中都有一个 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/

相关文章:

php - ZPanel和Cron工作与CakePHP

php - 需要解析 Yelp 响应 : "Signature was invalid" using PHP code Sample

cakephp - 用户 session 和在同一台计算机上运行的两个 CakePHP 应用程序

cakephp - cake php 3.0 中的视频嵌入问题

php - 在同一页面的多个字段上实现money.js

php - Cakephp 迁移 - 一般错误 : 1215 Cannot add foreign key constraint

cakephp - 从 AppExceptionHandler 渲染 View

mysql - CakePHP 模型之间的两种关系

php - 带有 Mamp : database connection error 的 Mac OS 上的 Cakephp 控制台(烘焙)

php - 使用 CakePHP 生成 Javascript View block