セッション データベースに別のテーブル プレフィックスを使用したいと考えています。私の設定ファイルでは、テーブルプレフィックスを「pre1_」に設定していますが、セッションでプレフィックス「pre2_」のテーブルを使用したいのですが、これは可能ですか?
ありがとう。
実行されないように、モデルの行にコメントを付けました。
// public $tablePrefix = 'cc_';
次に、私の AppController.php beforeFilter に追加しました
$this->modelname->tablePrefix=$this->Auth->user('company_prefix').'_';
私の権限のユーザー テーブルには、そのユーザーに固有の特定のテーブルの先頭に追加される company_prefix というフィールドがあります。
この件についてもっと知りたいです。
私はたくさん得る'Indirect modification of overloaded property DifferentController::$Modelname has no effect'
そのため、モデルが追加されたとき、またはコントローラーのデフォルトのときにのみこれを行う方法を探しています。すべてのコントローラーが必要なわけではないので、beforeFilter()
何らかの操作を行う必要があると思いますisset()
ModelasController.php 内:
$this->loadModel("Modelb");
$this->Modelb->tablePrefix = $this->Auth->user('company_code');
は、2 つ目の企業コード モデルを使用する適切な方法であり、beforeFind ロジックは必要ありません。
そのため、AppController だけが、上記と同様に、モデルを検出するために php 関数 isset を使用して、beforeFilter 内の可能なすべてのモデルに tablePrefix を設定する行を持っています。
しかし、loadModel を使用して 2 次モデルをコントローラーにプルすると、コントローラーで取得できる会社コードに tablePrefix を設定することで、すぐにそれに従います。これはモデル オブジェクトに到達し、tablePrefix 静的プロパティをオーバーライドします。
Cakephp 2.1 の 'company' プレフィックスの場合 - モデルで public $tablePrefix を使用し、コントローラーで tablePrefix を設定すると、これが私が行っていることであり、コード行が多すぎます (テーブルごとにプレフィックスを持つテーブルごとに 1 行のコード)。ユーザー)しかし、それは私が今できるすべてです。
Modela.php:
public $tablePrefix = 'anything_';
Modelb.php:
public $tablePrefix = 'anything_';
Modelc.php:
public $tablePrefix = 'anything_';
次に、AppController の public 関数 beforeFilter() で
if (isset($this->Modela->tablePrefix)) {$this->Modela->tablePrefix = $this->Auth->user('company_code').'_'; }
if (isset($this->Modelb->tablePrefix)) {$this->Modelb->tablePrefix = $this->Auth->user('company_code').'_'; }
if (isset($this->Modelc->tablePrefix)) {$this->Modelc->tablePrefix = $this->Auth->user('company_code').'_'; }
この方法では「オーバーロードされたプロパティ」エラーは発生しませんが、私のスキーマでは、すべてのユーザーが有効な会社コードを持っています。また、たとえば、「users」テーブルはすべてのユーザーで共有されています (ただし、ログインしているユーザー以外のユーザー レコードにアクセスできるのは管理者だけです)。
しかし、これはかなり面倒で、モデルの $tablePrefix company_code 設定によって分離されるすべてのモデルを AppController のコード行として定義する必要がない手段に興味があります。モデルの tablePrefix を本当に設定したいポイントは、参照する瞬間です
$this->loadModel("Modelb");
しかし、Model ディレクトリの modelb.php を 45 分間いじり、$tablePrefix プロパティを操作することはできませんでした。モデルがインスタンス化または参照されるとき、 $tablePrefix プロパティを必要とするテーブルについて、必要なプレフィックスを知る必要がありますが、その時点でプロパティを動的に設定できませんでした。(動的静的プロパティ?間違ったアプローチのように聞こえます)
だから、これは機能しますが、私はそれが好きではありません。Lisp プログラムで Fortran メソッドを使用しているように感じます。
I ended up changing the prefix in the database.php
config file to the prefix I wanted my sessions table to have, then in each model set the $table_prefix
property to the prefix those required. Seems a little weird, but it got the job done.