gpt4 book ai didi

cakephp - 在包含的模型上使用limit()

转载 作者:行者123 更新时间:2023-12-04 05:17:43 24 4
gpt4 key购买 nike

编码
说我有两个模型,分别称为ProductImage,它们通过Product hasMany ImageImage 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时的错误吗?如果是这样,应如何来限制,我将每张图像
的图像数量限制为

最佳答案

做到这一点最干净的方法是创建另一个关联:

$this->hasOne('FirstImage', [
'className' => 'Images',
'foreignKey' => 'image_id',
'strategy' => 'select',
'sort' => ['FirstImage.created' => 'DESC'],
'conditions' => function ($e, $query) {
$query->limit(1);
return [];
}
])

关于cakephp - 在包含的模型上使用limit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29775766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com