【问题标题】:CakePHP containable HABTM limitCakePHP 可包含的 HABTM 限制
【发布时间】:2014-08-12 08:18:41
【问题描述】:

根据 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',
    ),
);

Category 的关系:

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 件产品?

【问题讨论】:

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


    【解决方案1】:

    很遗憾,您不能在 HABTM 关系上使用 'limit'。出于性能原因,CakePHP 构建了一个查询来获取所有 HABTM 记录,这些记录随后被递归地分配给输出数组中的父记录键。

    如您所见,如果您应用 LIMIT 子句,它将导致 CakePHP 仅获取有限数量的关联产品。

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

    有关更多信息,请参阅此答案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-29
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多