首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找具有多个关联HABTM类型的一种类型的记录

查找具有多个关联HABTM类型的一种类型的记录
EN

Stack Overflow用户
提问于 2012-12-29 00:47:36
回答 2查看 420关注 0票数 0

我的CakePHP应用程序中有两个模型:NewsArticleImageImage使用HABTM (拥有并属于许多)关联与NewsArticle相关联,因此如果愿意,作者可以为一篇文章建立一个图库。

在我的应用程序的主页上,我想要显示头条,这将是至少有一张相关图片的最新发布的文章。我如何在我的控制器中形成这个条件?到目前为止,我已经做到了:

代码语言:javascript
复制
<?php
$topStory = $this->NewsArticle->find('first', array(
    'order' => array(
        'NewsArticle.created' => 'desc'
    )
));

但我不确定如何“计算”附加到我的NewsArticle模型的Image记录的数量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-29 01:49:28

如果你必须使用HABTM,你需要做一个连接(参见CakePHP Joins)。

原因是,普通的find()实际上执行单独的查询,然后CakePHP在将数据返回给您之前将数据放在一起。如果您试图通过子结果的存在来限制主结果,则需要使用连接。

如果您能够使用HasMany (这意味着ImagebelongTo NewsArticle),那么您可以使用CakePHP's counterCache

票数 0
EN

Stack Overflow用户

发布于 2012-12-29 02:18:38

通常明智的做法是为HABTM连接表创建一个CakePHP模型,然后就可以查询该表了。

NewsArticle将有一个名为news_articles的表。Image将有一个名为images的表。因此,连接表很可能是news_articles_images。

我建议您使用与连接表不同的别名来创建模型。以防止出现问题。所以你可以做这样的事情。

代码语言:javascript
复制
class Gallery extends AppModel
{
     var $name = 'Gallery';
     var $useTable = 'news_articles_images';
     var $belongsTo = array('NewsArticle','Image');
}

然后,在您的控制器中,您可以很容易地找到具有图像的第一篇文章。

代码语言:javascript
复制
$topStory = $this->Gallery->find('first',array('order'=>array('NewsArticle.created'=>'DESC'));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14072815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档