所以我有一个基于公司的系统,我将所有数据保存在一个数据库中,并通过使用所有表和users表中都存在的site_id字段来分隔数据。
现在我正在为每一个发现('全')做一个条件。是否有更全面的方式来做到这一点。也许在AppController中?即使是保存数据,我也必须在每次保存时设置site_id。
像
这样的东西public function beforeFilter() {
parent::beforeFilter();
$this->set('site_id', $this->Auth->user('site_id'));
}
任何方向都只会有所帮助。感谢
答案 0 :(得分:4)
<强> TLDR:强>
使用beforeFind()
方法创建一个行为,为所有查询附加site_id
条件。
示例/细节:强>
按照以下方式创建行为。注意,我从Configure变量获取siteId,但随时可以获得它。
<?php
class SiteSpecificBehavior extends ModelBehavior {
public function setup(Model $Model, $settings = array()) {
$Model->siteId = Configure::read('Site.current.id');
}
public function beforeFind(Model $Model, $query = array()) {
$siteId = $Model->siteId;
$query['conditions'][$Model->alias . '.site_id'] = $siteId ;
return $query;
}
}
然后在任何/所有要确保其特定于站点的模型上,添加:
public $actsAs = array('SiteSpecific');
这当然可以调整和改进,但它应该给你一个好主意。