设置默认模型条件

时间:2014-03-04 13:25:28

标签: cakephp cakephp-2.4

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

此条件将是用户登录的公司的ID。例如,假设公司ID为1,则必须显示与company_id 1相关的所有信息。

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

1 个答案:

答案 0 :(得分:9)

检查此代码

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'));
    }
}