【发布时间】:2019-04-09 13:12:20
【问题描述】:
我有一个文章表和一个评论表。 文章有很多评论。 每个评论都属于一个评论状态(comment_status_id): 1. 好,或 2. 不好,或 3.丑。
我想查询所有只有状态为 3(丑陋)的评论的文章。也就是说,排除具有状态 1 或 2 的评论的文章。
我可以编写一个子查询和查询来获取所有带有 Status Ugly 评论的文章:
$matchingComments = $this->Articles->getAssociation('Comments')->find()
->select(['article_id'])
->distinct()
->where(['comment_status_id' => 3]);
$query = $this->Articles->find()
->where(['Articles.id IN' => $matchingComments]);
这为我提供了所有评论状态为 3 的文章。但它也包括评论状态为 2 或 1 的文章以及至少一个状态为 3 的评论。
所以我的问题是: 是否有一种高效/优雅的方法可以使此查询与查询生成器一起使用,因此结果只有评论为 ALL comment_status 3(丑陋)的文章?
我确定我可以使用 for 循环解析 $query 结果并构建一个新的结果数组,但我想看看在初始查询中是否有更好的方法和/或/with子查询。 提前感谢您的任何建议!
D.
【问题讨论】:
-
你知道如何在原始 SQL 中做到这一点吗?最好先弄清楚这一点。
-
感谢 ndm.... 是的,这是解决问题的正确方法。我将在下面添加我的解决方案。
标签: cakephp associations cakephp-3.x querying