3

ノードテーブル(Nodeモデル)があります。さまざまなデータ型に関連付けたいのですが、フィールドがに設定されている場合に限ります1

例:

nodesのテーブルにはdata_articleフィールド(tinyint 1)があります。$hasMany Articleそのフィールドが1の場合にのみノードが必要です。

私はこれを試しました:

public $hasMany = array(
    'Article' => array(
        'conditions' => array('Node.data_articles' => '1')
    ),
);

しかし、エラーが発生します:

列が見つかりません:1054不明な列'Node.data_articles' in'whereclause'

アソシエーションは独自のクエリでArticlefindを実行しているため、次のようになります。

SELECT `Article`.`id`, `Article`.`title`, `Article`.`node_id`, ...more fields...
FROM `mydatabase`.`articles` AS `Article`
WHERE `Node`.`data_artiles` = '1'
AND `Article`.`node_id` = ('501991c2-ae30-404a-ae03-2ca44314735d')

このクエリではNodeテーブルがまったく結合されていないため、明らかにそれは機能しません。

TLDR:

メインモデルのフィールドに基づいて関連付けを行うことはできますか?そうでない場合、他にどのようにして異なるデータ型を複数のテーブルに保持し、毎回それらをクエリする必要がないのですか?

4

2 に答える 2

1

CakePHPでこれを行う標準的な方法はないと思います(少なくとも私は方法を想像することはできません)。確実に可能なことは、関連するモデルを動的にバインドすることです。

そのため、メソッドに関するrecursiveパラメーターを渡し、その結果に基づいて関連付けられたモデルのバインドを動的に解除することにより、関連付けなしでモデルをクエリできます。その後、確かに、もう一度クエリを実行する必要があります。これから動作を構築して、再利用可能にすることができます。-1find()

メインモデルがクエリされた後、関連するモデルがクエリされる前に、Cakeがコールバックを使用して2段階のクエリを実行できれば、非常に洗練されたソリューションが可能になりますが、現時点ではこれは不可能です。

編集: IFステートメントを含むカスタムクエリを使用してこれをよりパフォーマンス的にアーカイブするための非Cakeの方法があるかもしれませんが、私はここではSQLの専門家ではありません。

于 2012-08-23T09:17:06.017 に答える
-2

あなたは反対側からそれをするべきです:

public $belongsTo = array(
'Node' => array(
    'conditions' => array('Node.data_articles' => '1')
  ),
);
于 2012-08-11T08:21:19.580 に答える