【问题标题】:Find record with at least one HABTM related record in CakePHP在 CakePHP 中查找至少有一条 HABTM 相关记录的记录
【发布时间】:2012-12-02 19:37:47
【问题描述】:

我的 CakePHP 应用程序中有两个模型:NewsArticleImage。一篇新闻文章可以拥有并属于许多图片,但一张图片不是必须的。

如何在我的应用程序中找到具有至少一个关联图像记录的第一篇新闻文章,以便丢弃没有相关图像记录的任何新闻文章?

【问题讨论】:

    标签: cakephp cakephp-2.0 has-and-belongs-to-many


    【解决方案1】:

    您必须使用 INNER JOIN(请参阅Joins in CakePHP)根据关联的 HABTM 项的存在来限制 find()。

    【讨论】:

      【解决方案2】:

      使用连接很简单,只需使用 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,如果没有说明,它将为每个飞行员重复飞机收集一行!

      【讨论】:

      • 太棒了!也非常适合代码示例。不幸的是,我已经给出了选择的答案,所以我能做的就是给你一个赞成票。
      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      相关资源
      最近更新 更多