gpt4 book ai didi

cakephp - 只检索至少有一个关联的记录

转载 作者:行者123 更新时间:2023-12-04 06:28:20 27 4
gpt4 key购买 nike

这很简单,但我想我以前从未遇到过。我有一个 Page型号hasMany Comment .我想拉出所有至少有 1 条评论的页面,但删除没有评论的页面。当我看着它时,我意识到我不知道该怎么做。我想我可以使用临时连接,但如果可能的话,我宁愿使用 Containable。我试过测试 not nullComment条件和其他一两个不太可能起作用的事情,但这似乎应该是可能的。

当然,我现在得到的是所有页面,其中一些页面记录的 Comment 为空。成员。如果可以的话,最好跳过所有额外的垃圾。

我的 find称呼:

    $pages = $this->Folder->Page->find(
'all',
array(
'contain' => array(
'Comment' => array(
'order' => array( 'Comment.modified DESC' ),
),
'Folder' => array(
'fields' => array( 'Folder.id' ),
),
),
'conditions' => array(
'Folder.group_id' => $id,
),
)
);

谢谢。

最佳答案

除了临时连接之外,您还有几种可用的方法:

  • 对数据集进行非规范化并向 pages 表添加 has_comment 标志。添加 'Page.has_comment' => 1根据你的条件。
  • 使用 DISTINCT page_id 对 Comment 运行查询。
    $comments = $this->Folder->Page->Comment->find('all', array(
    'conditions' => array('DISTINCT Comment.page_id'
    'contain' => array(
    'Page' => array(
    'Folder'
    )
    )
    );
  • 首先从评论表中获取一组不同的页面 ID。
    $page_ids = $this->Folder->Page->Comment->find('list', array(
    'fields' => array('id', 'page_id'),
    'conditions' => array('DISTINCT Comment.page_id'),
    );
    $pages = $this->Folder->Page->find('all', array(
    'conditions' => array('Page.id' => $page_ids),
    'contain' => array(
    ...
    )
    );
  • 关于cakephp - 只检索至少有一个关联的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5756065/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com