【发布时间】:2012-12-02 19:37:47
【问题描述】:
我的 CakePHP 应用程序中有两个模型:NewsArticle 和 Image。一篇新闻文章可以拥有并属于许多图片,但一张图片不是必须的。
如何在我的应用程序中找到具有至少一个关联图像记录的第一篇新闻文章,以便丢弃没有相关图像记录的任何新闻文章?
【问题讨论】:
标签: cakephp cakephp-2.0 has-and-belongs-to-many
我的 CakePHP 应用程序中有两个模型:NewsArticle 和 Image。一篇新闻文章可以拥有并属于许多图片,但一张图片不是必须的。
如何在我的应用程序中找到具有至少一个关联图像记录的第一篇新闻文章,以便丢弃没有相关图像记录的任何新闻文章?
【问题讨论】:
标签: cakephp cakephp-2.0 has-and-belongs-to-many
您必须使用 INNER JOIN(请参阅Joins in CakePHP)根据关联的 HABTM 项的存在来限制 find()。
【讨论】:
使用连接很简单,只需使用 RIGHT JOIN 连接 HABTM 表,因此只收集带有 HABTM 记录的行,这是我的 https://www.flylogs.com 示例,我只想要至少被飞行员使用的飞机和他们的名字:
$this->paginate = array(
'contain' => array('Pilot.name'),
'group' => 'Aircraft.id',
'joins' => array(
array(
'table' => 'pilots_aircraft',
'alias' => 'PilotAircraft',
'type' => 'right',
'conditions' => 'Aircraft.id = PilotAircraft.aircraft_id'
)
),
);
$aircraft = $this->paginate('Aircraft');
重要的group clausule,如果没有说明,它将为每个飞行员重复飞机收集一行!
【讨论】: