2
我有一個條件,大多數模型在檢索數據時必須遵守。設置默認模型條件
這種情況將是該用戶登錄該公司的標識。因此,舉例來說,假設公司編號爲1,則所有相關的信息COMPANY_ID 1必須顯示。
如何爲我的模型設置默認條件?
我有一個條件,大多數模型在檢索數據時必須遵守。設置默認模型條件
這種情況將是該用戶登錄該公司的標識。因此,舉例來說,假設公司編號爲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'));
}
}
不錯的辦法,但我會叫'setCompanyId()'內'beforeFilter() ''on'FooController' – Eagle
那麼,你可以做$ this - > {$ this-> modelClass} - > setCompanyId(...);在每個需要它的控制器的beforeFilter中。如果你在AppController中這樣做,你會遇到問題。如果模型實現方法或者我建議加載行爲,則需要將其包裝在檢查中。 – burzum
查看我更新的答案。 – burzum