0

所以我有一个基于公司的系统,我将所有数据保存在一个数据库中,并使用所有表和用户表中存在的 site_id 字段来分隔数据。

现在我正在对每一个 find('all') 做一个条件。有没有更全球化的方式来做到这一点。也许在 AppController 中?即使为了保存数据,我也必须在每次保存时设置 site_id。

就像是

public function beforeFilter() {

    parent::beforeFilter();
    $this->set('site_id', $this->Auth->user('site_id'));

}

任何方向只会有帮助。谢谢

4

1 回答 1

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

这当然可以调整和改进,但它应该给你一个好主意。

于 2013-03-17T08:18:16.443 回答