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

Cakephp 查找具有多个关联HABTM类型的一种类型的记录,cakephp,model,cakephp-2.0,model-associations,Cakephp,Model,Cakephp 2.0,Model Associations,我的CakePHP应用程序中有两个模型:新闻文章和图像图像与新闻文章使用HABTM(拥有并属于多个)关联,因此作者可以根据自己的意愿建立文章库 在我的应用程序的主页上,我想显示最重要的消息,这将是最新发布的文章,其中至少有一张相关图片。我将如何在控制器中形成这种情况?到目前为止,我已经: <?php $topStory = $this->NewsArticle->find('first', array( 'order' => array( 'New

我的CakePHP应用程序中有两个模型:
新闻文章
图像
<代码>图像与
新闻文章
使用HABTM(拥有并属于多个)关联,因此作者可以根据自己的意愿建立文章库

在我的应用程序的主页上,我想显示最重要的消息,这将是最新发布的文章,其中至少有一张相关图片。我将如何在控制器中形成这种情况?到目前为止,我已经:

<?php
$topStory = $this->NewsArticle->find('first', array(
    'order' => array(
        'NewsArticle.created' => 'desc'
    )
));

如果必须使用HABTM,则需要进行连接(请参阅)

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


如果您可以使用HasMany(即
图像
归属于
新闻文章
),那么您可以使用它。

为HABTM连接表创建CakePHP模型通常是明智的,然后您可以查询该表

NewsArticle将有一个名为news\u articles的表。Image将有一个名为images的表。所以连接表很可能是新闻文章图片

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

class Gallery extends AppModel
{
     var $name = 'Gallery';
     var $useTable = 'news_articles_images';
     var $belongsTo = array('NewsArticle','Image');
}
然后,在控制器中,您可以轻松找到第一个具有图像的文章

$topStory = $this->Gallery->find('first',array('order'=>array('NewsArticle.created'=>'DESC'));

谢谢如果我想在多篇文章中使用一个图像,我可能不会侥幸逃脱
有很多
关系,如果我说,将来为作者介绍一个图像库。如果我使用RTFM,这会有帮助!阅读CakePHP食谱中关于连接的部分,最终得出以下解决方案:。感谢您将我引向join。您提到创建一个新模型,它实际上是join的别名。CakePHP是否在内部创建了一个“桥”模型?如果是的话,我是否可以查询该伪模型而不是创建自己的模型?@MartinBean是的,它在内部创建了一个。它的名称将是联接表的名称,但不会配置任何$belongsTo关联。另外,我不建议创建与此内部文件同名的Model.php文件。Cake并不总是使用您创建的模型;或者基于联接表名称的内容。这叫做“hasMany-Through”,在蛋糕册中。@MathewFoscarini-我们都去过,没什么大不了的:)我不确定这是否是CakePHP特定的术语,但是-这里是链接: