【发布时间】:2015-04-21 14:53:48
【问题描述】:
代码
假设我有两个模型,名为Product 和Image,它们通过Product hasMany Image 和Image belongsTo Product 链接。
现在,假设我要获取所有带有第一张图片的产品。我会使用这段代码:
$this->Products->find('all')
->contain([
'Images' => function($q) {
return $q
->order('created ASC')
->limit(1);
}
]);
看起来不错,对吧?除了现在只有 一个 产品包含图像,尽管实际上每个产品都包含至少一个图像(如果查询没有限制)。
生成的查询
问题似乎与限制有关,因为这会产生以下两个查询(例如):
SELECT
Products.id AS `Products__id`,
FROM
products Products
和
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
查看第二个查询,很明显这将始终只产生一张图像。
问题
但是,当我致电 limit(1) 时,我希望 Cake ORM 将图像限制为 每个产品 1 个。
我的问题:这是我如何使用 ORM 的错误吗?如果是这样,我应该如何应该将图片数量限制为每张图片一张?
【问题讨论】:
-
供将来参考:我最终只是省略了
limit(),只使用数组中的第一个图像。所有答案在工作时似乎都是一种解决方法。 Cake ORM 总是对包含使用单个查询,即使这是不希望的(例如向查询添加限制时)。
标签: cakephp orm cakephp-3.0