cakephp - 设置默认模型条件

标签 cakephp cakephp-2.4

我有一个条件,我的大多数模型在检索数据时都必须遵守该条件。

这个条件将是用户登录的公司的id。例如,假设公司id是1,那么与company_id 1相关的所有信息都必须显示。

如何为我的模型设置默认条件?

最佳答案

检查这段代码

class FooModel extends AppModel {

    protected $_companyId = null;

    public function setCompanyId($companyId) {
        // Optional validation of the id here
        $this->_companyId = $companyId;
    }

    public function beforeFind($query) {
        if (!empty($this->_companyId)) {
            $query['conditions'][$this->alias . '.company_id'] = $this->_companyId;
        }
        return $query;
    }
}

为了将其与模型分离,我建议您在一个行为中实现这两个方法,并将其仅附加到需要它的模型。

编辑,这里作为行为:

class CompanyFilterBehavior extends ModelBehavior {

    protected $_companyId = null;

    public function setCompanyId(Model $Model, $companyId) {
        // Optional validation of the id here
        $this->_companyId = $companyId;
    }

    public function beforeFind(Model $Model, $query) {
        if (!empty($this->_companyId)) {
            $query['conditions'][$Model->alias . '.company_id'] = $this->_companyId;
        }
        return $query;
    }
}

在您的 AppController 中,您可以这样做:

public function beforeFilter() {
    if ($this->User->loggedIn() 
        && $this->{$this->modelClass}->Behaviors->loaded('CompanyFilter'))
    {
        $this->{$this->modelClass}->setCompanyId($this->Auth->user('company_id'));
    }
}

关于cakephp - 设置默认模型条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22173230/

相关文章:

CakePHP - 如何实现密码的河豚散列?

CakePHP 简单例份验证教程不起作用

cakephp - 为什么在我将调试切换到 3 之前不会发生一些更改?

php - CakePHP。应用程序/控制台/蛋糕 : Permission denied for root user

php - 验证 HABTM 关系中其他模型的多个字段

CakePHP/CakePHP 2.4 应用程序

php - CakePHP:如何路由分页的排序参数?

php - 使用 simplesamlphp 1.10 和 cakePHP 2.3 不起作用

php - CakePHP 3.0 在哪里放置查询

validation - CakePHP 验证 nonBlank 失败字段是否为空或 !Empty