The Code
假设我有两个模型,名为Product
and Image
,它们通过以下方式链接Product hasMany Image
and Image belongsTo Product
.
现在,假设我想获取所有带有第一张图片的产品。我会使用这段代码:
$this->Products->find('all')
->contain([
'Images' => function($q) {
return $q
->order('created ASC')
->limit(1);
}
]);
看起来差不多吧?除了现在而已one的产品包含一张图片,尽管实际上每个产品至少包含一张图片(如果查询没有限制)。
结果查询
问题似乎出在限制上,因为这会产生以下两个查询(例如):
SELECT
Products.id AS `Products__id`,
FROM
products Products
and
SELECT
Images.id AS `Images__id`,
Images.product_id AS `Images__product_id`,
Images.created AS `Images__created`
FROM
images Images
WHERE
Images.product_id in (1,2,3,4,5)
ORDER BY
created ASC
LIMIT 1
看看第二个查询,很明显这总是只会产生一张图像。
问题
然而,我希望 Cake ORM 将图像限制为 1每个产品当我打电话时limit(1)
.
我的问题:这是我使用 ORM 的错误吗?如果是这样,如何should我将图像数量限制为每张图像一张?