根据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个产品?
答案 0 :(得分:0)
我在这个网站上发现了类似的问题。也许这可以帮到你?
答案 1 :(得分:0)
很遗憾,您无法在HABTM关系上使用'limit'
。出于性能原因,CakePHP构建单个查询以获取所有HABTM记录,这些记录稍后以递归方式分配给输出数组中的父记录键。
如果您应用LIMIT子句,它将导致CakePHP仅提取有限数量的关联产品,正如您所注意到的那样。
可能应修改HABTM section in the Cookbook以删除'limit'
作为选项,或澄清其预期用途。
有关详细信息,请参阅此答案: