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

前端之家收集整理的这篇文章主要介绍了cakephp – 在包含的模型上使用limit()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
代码

假设我有两个名为Product和Image的模型,它们通过Product hasMany Image和Image belongsTo Product链接.

现在,假设我想获取每个第一张图片的所有产品.我会用这个代码

  1. $this->Products->find('all')
  2. ->contain([
  3. 'Images' => function($q) {
  4. return $q
  5. ->order('created ASC')
  6. ->limit(1);
  7. }
  8. ]);

看起来对,对吧?除了现在只有一个产品包含图像,但实际上每个产品至少包含一个图像(如果查询没有限制).

生成查询

问题似乎是有限制的,因为这会产生以下两个查询(例如):

  1. SELECT
  2. Products.id AS `Products__id`,FROM
  3. products Products

  1. SELECT
  2. Images.id AS `Images__id`,Images.product_id AS `Images__product_id`,Images.created AS `Images__created`
  3. FROM
  4. images Images
  5. WHERE
  6. Images.product_id in (1,2,3,4,5)
  7. ORDER BY
  8. created ASC
  9. LIMIT 1

查看第二个查询,很明显这将永远只会产生一个图像.

问题

但是,当我调用limit(1)时,我原本期望Cake ORM将图像限制为每个产品1个.

我的问题:这是我使用ORM的错误吗?如果是这样,我应该如何将每个图像的图像数量限制为一个?

最简单的方法是创建另一个关联:
  1. $this->hasOne('FirstImage',[
  2. 'className' => 'Images','foreignKey' => 'image_id','strategy' => 'select','sort' => ['FirstImage.created' => 'DESC'],'conditions' => function ($e,$query) {
  3. $query->limit(1);
  4. return [];
  5. }
  6. ])

猜你在找的PHP相关文章