1

Cookbook のContainable Behaviorセクションの2 番目の文によると、この句がcontain()サポートされています。limit

CakePHP 1.2 コアに新たに追加されたのは、ContainableBehavior です。このモデルの動作により、モデルの検索操作をフィルタリングおよび制限できます。

CakePHP 2.5 を使用しています。

Product と Category (HABTM 関係) の 2 つのモデルがあります。

製品の関係:

public $hasAndBelongsToMany = array(
    'Category' => array(
        'className' => 'Category',
        'joinTable' => 'categories_products',
        'foreignKey' => 'product_id',
        'associationForeignKey' => 'category_id',
    ),
);

カテゴリの関係:

public $hasAndBelongsToMany = array(
    'Product' => array(
        'className' => 'Product',
        'joinTable' => 'categories_products',
        'foreignKey' => 'category_id',
        'associationForeignKey' => 'product_id',
    ),
);

私は次のように使用しようとしてlimitいます:

$cats = $this->Category->find('all', array(
    'fields' => array(
        'id',
        'parent_id'
    ),
    'contain' => array(
        'Product' => array(
            'fields' => array(
                'id',
                'name',
            ),
            'limit' => 3,
            'order' => array('created DESC'),
        ),
    ),
));

その結果、全体で 3 つの製品のみが選択されます。カテゴリごとに 3 つの製品ではありません。包含可能な動作が適切に読み込まれます。カテゴリーごとに 3 つの製品を取得するにはどうすればよいですか?

4

1 に答える 1

0

'limit'残念ながら、HABTM 関係では使用できません。パフォーマンス上の理由から、CakePHP は単一のクエリを作成してすべての HABTM レコードを取得します。これらのレコードは後で出力配列の親レコード キーに再帰的に割り当てられます。

LIMIT 句を適用すると、お気づきのように、CakePHP は限られた数の関連製品のみをフェッチすることになります。

クックブックのHABTM セクションは、おそらく修正し'limit'てオプションとして削除するか、使用目的を明確にする必要があります。

詳細については、この回答を参照してください。

于 2016-01-09T12:52:57.477 に答える