0

私はモデルを持っています: Project=>Keyword

HMBTM 関係を使用 (両方のモデルで設定)。

キーワード テーブルはツリーとして機能します。キーワードは、それらの間で階層関係を持っています。

収容可能な動作を使用しています。

ユーザーがキーワードを選択します。

返されるレコード (プロジェクト) を、選択したキーワード、またはそのキーワードの子によって制限したいと考えています。インデックス アクションを再利用しようとしています。キーワードが選択されていない場合は、標準のインデックス ビューをレンダリングし、キーワードが選択されている場合は、すべての子キーワードを検索し、返されたプロジェクトをいずれかのキーワード ID を持つプロジェクトにフィルターします。

子 (および元の) キーワード ID の配列を作成しようとしましたが、その配列を検索アクションのフィルタリングにする方法がわかりません。

私は使用してみました:

$this->Project->find('all',
    array(
        'contain' => array('Keyword.id'=>array($childkeywords))     
    )
);

$childkeywords は、array_push を使用して作成された、関連する ID の配列です。ただし、これはキーと値のペアを使用せず、各 ID の int 値のみを使用します。そのため、適切に構成されていないと思います。

とても簡単なことをしたいのですが、解決策から遠ざかっています。レコードを関連付けられたモデルの ID のコレクションに制限する標準的な方法はありませんか?

乾杯

パウロの助けを借りて、私は今持っています:

$this->Project->find('all', array(
                                    'fields' => array('id','title','country', 'project_ref'),
                                    'type' => array('inner'),
                                    'contain' => array('Keyword' => array(
                                                                'conditions' => array('Keyword.id' => $childkeywords)                                               
                                                                            )
                                                    )
                                            )
                                )

しかし、タイプ inner を使用しても結果は変わりません..

4

2 に答える 2

0

次のようなものが必要です。

$this->Project->find('all', array(
    'contain' => array('Keyword' => array(
                'conditions' => array('Keyword.id' => $childkeywords)
            )
    )
));
于 2012-10-09T13:43:42.637 に答える
0

次のようなことを試してください:

$this->Project->Keyword->find('all', array(
    'conditions' => array(
        'Keyword.id' => array(1, 2, 3, 4)
    )
));

この場合、Containable を使用する必要はありません。

または、TreeBehaviorを試すことができます。

于 2012-10-09T14:03:06.447 に答える