0

我的 CakePHP 应用程序中有两个模型:NewsArticleImage. ImageNewsArticle使用 HABTM(拥有并属于许多)关联相关联,因此作者可以根据需要为文章建立画廊。

在我的应用程序主页上,我想显示头条新闻,它只是最新发表的文章,至少有一个相关图像。我将如何在我的控制器中形成这种情况?到目前为止,我有:

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

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

4

2 回答 2

0

如果您必须使用 HABTM,则需要进行 JOIN(请参阅CakePHP Joins)。

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

如果您能够改用 HasMany (意思是Imagea belongToNewsArticle,您可以使用CakePHP 的 counterCache

于 2012-12-28T17:49:27.707 回答
0

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

NewsArticle 将有一个名为 news_articles 的表。Image 会有一个名为 images 的表。所以连接表很可能是 news_articles_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'));
于 2012-12-28T18:18:37.610 回答