0

したがって、私は会社ベースのシステムを持っており、すべてのデータを 1 つのデータベース内に保持しており、すべてのテーブルとユーザー テーブルに存在する site_id フィールドを使用してデータを分離しています。

現在、すべての検索(「すべて」)に対して条件を実行しています。これを行うためのよりグローバルな方法はありますか。多分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 に答える