我的CakePHP应用程序中有两个模型:NewsArticle
和Image
。 Image
与使用HABTM(拥有并且属于许多)关联的NewsArticle
相关联,因此作者可以根据需要为文章建立图库。
在我的应用程序主页上,我想显示头条新闻,它只是最新发表的文章,至少有一个相关图像。我如何在我的控制器中形成这种情况?到目前为止,我有:
<?php
$topStory = $this->NewsArticle->find('first', array(
'order' => array(
'NewsArticle.created' => 'desc'
)
));
但我不确定如何“计算”附加到Image
模型的NewsArticle
条记录的数量。
答案 0 :(得分:0)
如果您必须使用HABTM,则需要进行加入(请参阅CakePHP Joins)。
原因是,普通的find()
实际上会进行单独的查询,然后CakePHP会在将数据返回给您之前将数据放在一起。如果您试图通过子结果的存在来限制主要结果,则需要使用JOIN。
如果您能够使用HasMany(意味着Image
将belongTo
一个NewsArticle
),则可以使用CakePHP's counterCache。
答案 1 :(得分:0)
为HABTM连接表创建CakePHP模型通常是明智的,然后您可以查询该表。
NewsArticle将有一个名为news_articles的表。图像将有一个名为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'));