2

セッション データベースに別のテーブル プレフィックスを使用したいと考えています。私の設定ファイルでは、テーブルプレフィックスを「pre1_」に設定していますが、セッションでプレフィックス「pre2_」のテーブルを使用したいのですが、これは可能ですか?

ありがとう。

4

4 に答える 4

0

実行されないように、モデルの行にコメントを付けました。

//    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()

于 2012-08-19T00:40:59.983 に答える
0

ModelasController.php 内:

$this->loadModel("Modelb");
$this->Modelb->tablePrefix = $this->Auth->user('company_code');

は、2 つ目の企業コード モデルを使用する適切な方法であり、beforeFind ロジックは必要ありません。

そのため、AppController だけが、上記と同様に、モデルを検出するために php 関数 isset を使用して、beforeFilter 内の可能なすべてのモデルに tablePrefix を設定する行を持っています。

しかし、loadModel を使用して 2 次モデルをコントローラーにプルすると、コントローラーで取得できる会社コードに tablePrefix を設定することで、すぐにそれに従います。これはモデル オブジェクトに到達し、tablePrefix 静的プロパティをオーバーライドします。

于 2012-08-20T20:13:36.557 に答える
0

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 メソッドを使用しているように感じます。

于 2012-08-20T16:45:48.910 に答える
0

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.

于 2012-08-22T15:37:06.330 に答える