1

ツリーの動作、メーカー、およびカテゴリを使用するように設定された2つのテーブルがあります。

製品は1つのカテゴリと1つのメーカーにのみ属することができますが、一部のメーカー(子)は他のメーカー(親)によって所有され、同様に一部のカテゴリ(子)は別の(親)のサブカテゴリです。

私は次のことをしたい:

カテゴリID(親)を指定すると、サブカテゴリ内のすべての製品を検索し、メーカーID(親)を指定すると、子メーカーのすべての製品を検索します

私は次のことを試しました(製品コントローラーで):

$conditions['Product.category_id'] = $this->Product->Category->children($id,false,'id');
$this->paginate = array(
            'conditions' => $conditions,
            'limit' => 21
        );
$products = $this->paginate('Product');
$this->set(compact('products'));    

しかし、それは私にこれを与えます:

 WHERE `Product`.`category_id` IN (Array, Array, Array, Array, Array, Array)

print_rを実行すると、必要な情報を取得していることがわかります(以下を参照)が、どうすればそれに到達できますか?これを行うためのより良い方法はありますか?

Array
(
[Product.category_id] => Array
    (
        [0] => Array
            (
                [Category] => Array
                    (
                        [id] => 11
                    )

            )

        [1] => Array
            (
                [Category] => Array
                    (
                        [id] => 12
                    )

            )

        [2] => Array
            (
                [Category] => Array
                    (
                        [id] => 23
                    )

            )

        [3] => Array
            (
                [Category] => Array
                    (
                        [id] => 24
                    )

            )

        [4] => Array
            (
                [Category] => Array
                    (
                        [id] => 25
                    )

            )

        [5] => Array
            (
                [Category] => Array
                    (
                        [id] => 26
                    )

            )

    )

)
4

1 に答える 1

3

次のように、category-idのみを含む配列が必要なため、クエリは失敗します。

$conditions['Product.category_id'] = array(1,4,5,6);

Hash::extract()これは、 (またはSet::extract()CakePHP 1.3を使用している場合)を使用して配列からこれらの値を「抽出」することで実現できます。

$categoryIds = $this->Product->Category->children($id,false,'id');

$conditions['Product.category_id'] = Hash::extract($categoryIds, '{n}.Category.id);

ここでハッシュユーティリティのドキュメントを読んでください:

http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::extract

于 2013-03-24T19:48:36.343 に答える