1

根据 Cookbook 的Containable Behavior部分的第二句,contain()支持该limit条款。

CakePHP 1.2 核心的新增功能是 ContainableBehavior。此模型行为允许您过滤和限制模型查找操作。

我正在使用 CakePHP 2.5。

我有两个模型:产品和类别(HABTM 关系)。

产品关系:

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 仅获取有限数量的关联产品。

Cookbook 中的HABTM 部分可能应该被修改为'limit'作为一个选项删除,或澄清其预期用途。

请参阅此答案以获取更多信息:

于 2016-01-09T12:52:57.477 回答