Lar*_*ert 8 orm cakephp cakephp-3.0
假设我有两个名为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);
}
]);
Run Code Online (Sandbox Code Playgroud)
看起来对,对吧?除了现在只有一个产品包含图像,但实际上每个产品至少包含一个图像(如果查询没有限制).
问题似乎是有限制的,因为这会产生以下两个查询(例如):
SELECT
Products.id AS `Products__id`,
FROM
products Products
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)
查看第二个查询,很明显这将始终只生成一个图像.
但是,当我打电话时,我原本期望Cake ORM将图像限制为每个产品 1 个limit(1)
.
我的问题:这是我使用ORM的错误吗?如果是这样,我应该如何将每个图像的图像数量限制为一个?
Jos*_*uez 14
最简单的方法是创建另一个关联:
$this->hasOne('FirstImage', [
'className' => 'Images',
'foreignKey' => 'image_id',
'strategy' => 'select',
'sort' => ['FirstImage.created' => 'DESC'],
'conditions' => function ($e, $query) {
$query->limit(1);
return [];
}
])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2640 次 |
最近记录: |