3

私は CakePHP にかなり慣れていませんが、コツをつかみ始めていると思います。関連するテーブル情報を再帰的に取得しようとしていますが、再帰する関連モデルを指定したいと考えています。私の目標を示す例を挙げましょう。

会社名、ウェブサイトなどの情報を持つモデル「Customer」があります。また、「Distributor」や「Manufacturer」などの名前と説明など、説明的なカテゴリ情報が含まれているだけの「CustomerType」に属しています。

「Customer」で検索を行うとき、関連付けられた「CustomerType」と「Address」情報をサブ配列として取得したいのですが、これは hasMany と belongsTo の関連付けを適切に設定するだけでうまくいきます。しかし、ここに私の問題があります。関連する州/国情報を取得したいのです。したがって、各「Address」配列行に「state_id」だけではなく、「state」=> array(「id」= 20、「name」=「New York」、...) などを含める必要があります。

Partner モデルで $recursive をより高い値 (たとえば 2) に設定すると、各「住所」の都道府県情報に必要なものが得られます。しかし、それは「CustomerType」でも再帰するため、「Partner」オブジェクトの「CustomerType」フィールドには、そのタイプに一致するすべての Customer オブジェクトの巨大な配列があり、数千の長さになる可能性があります。

要点は、「CustomerType」で再帰するのではなく、「Address」でのみ再帰したいということです。これを設定する方法はありますか?

長文の質問で申し訳ありません。よろしくお願いします。

4

2 に答える 2

9

「収容可能」動作を使用することをお勧めします。本のケーキ サイトのヘルプを参照してください: http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

于 2010-04-19T16:20:20.530 に答える
3

場合によっては、containable によって生成されるクエリが多すぎることがあります。目的を達成するための別のオプションは、CustomerType モデルのバインドを解除することです。詳細については、http://teknoid.wordpress.com/2008/07/17/forcing-an-sql-join-in-cakephp/、http : //mark-story.com/posts/view/ご覧ください。 using-bindmodel-to-get-to-deep-relations

于 2010-04-19T22:36:10.050 に答える