0

3 つのテーブルがあります (実際にはさらにいくつかありますが、この問題には 3 つしか必要ありません)。アプリケーション、Appattrs、および Appcats。CakePHP の用語で (私はまだフレームワークを学んでいるので、できる限り) アプリケーションには多くの Appattrs があり、Appattrs はアプリケーションに属しています。簡単。

問題は、Appattrs と Appcat を関連付けたいときに発生します。関連付けは、フィールド値と Appattrs の対応する外部キーに基づいています。例えば:

appattrs.type = 'appcatid' の場合、appattrs.value は Appcat テーブル内のレコードを指します。

appattrs テーブルには、静的データ appattrs.type='dateadded' および value='201201011300' と外部キー参照が保持されます。データがこのように保存される理由については議論しません。アプリケーション レコード、関連付けられた attr レコード、および関連付けられた行を含む attr レコードを取得できる関連付けを作成する方法を理解したいだけです。該当する表から。動的に。

クエリに基づいてモデルを作成し、そのモデルを関連付けることができるはずだと私には思えます-それを行う方法がわかりません。

--

3 つのテーブルのスキーマを投稿する必要がある場合は、投稿できます。現在のモデル コードを投稿することもできますが、正直なところ、現時点では関連付け変数に過ぎないため、どこにもアクセスできないと思います。

4

1 に答える 1

1

この設計の背後にあるロジックがわかりませんが、あなたが探しているのは、その場で関連付けを作成および破棄することです。

CakePHP ドキュメントのこのセクションでは、対応するコントローラー内からモデルを関連付ける方法について説明します。

したがって、たとえば、特定のデータをAppattrモデルに保存する場合は、データ チェックを行い、bind()メソッドを使用して関連付けを作成できます。

上記に対する非常に抽象的なアプローチは、次のようなものになります

public function yourmethod() {
     ...
     if ($this->request->data['Appattr']['type'] == 'sometype') {
         $this->Appattr->bindModel(
                array(/*Your association*/ => array(/* Your attributes...*/)
         );
         /* Rest of the logic follows */
     }
 }

この方法で仕事は完了しますが、データベース内のデータが非常に複雑になり、コードが非常に複雑になる可能性が非常に高くなります。

これが役立つことを願っています

于 2013-02-24T14:21:59.530 に答える