我的CakePHP应用程序中有两个模型:NewsArticle和Image。Image使用HABTM (拥有并属于许多)关联与NewsArticle相关联,因此如果愿意,作者可以为一篇文章建立一个图库。
在我的应用程序的主页上,我想要显示头条,这将是至少有一张相关图片的最新发布的文章。我如何在我的控制器中形成这个条件?到目前为止,我已经做到了:
<?php
$topStory = $this->NewsArticle->find('first', array(
'order' => array(
'NewsArticle.created' => 'desc'
)
));但我不确定如何“计算”附加到我的NewsArticle模型的Image记录的数量。
发布于 2012-12-29 01:49:28
如果你必须使用HABTM,你需要做一个连接(参见CakePHP Joins)。
原因是,普通的find()实际上执行单独的查询,然后CakePHP在将数据返回给您之前将数据放在一起。如果您试图通过子结果的存在来限制主结果,则需要使用连接。
如果您能够使用HasMany (这意味着Image将belongTo NewsArticle),那么您可以使用CakePHP's counterCache。
发布于 2012-12-29 02:18:38
通常明智的做法是为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'));https://stackoverflow.com/questions/14072815
复制相似问题