CakePHP可容纳HABTM限制

时间:2014-08-12 08:18:41

标签: cakephp orm cakephp-2.5 containable cakephp-2.x

根据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个产品?

2 个答案:

答案 0 :(得分:0)

我在这个网站上发现了类似的问题。也许这可以帮到你?

Applying Limit on associated model Cakephp 2.3x HABTM

答案 1 :(得分:0)

很遗憾,您无法在HABTM关系上使用'limit'。出于性能原因,CakePHP构建单个查询以获取所有HABTM记录,这些记录稍后以递归方式分配给输出数组中的父记录键。

如果您应用LIMIT子句,它将导致CakePHP仅提取有限数量的关联产品,正如您所注意到的那样。

可能应修改HABTM section in the Cookbook以删除'limit'作为选项,或澄清其预期用途。

有关详细信息,请参阅此答案:

相关问题