我对Propel ORM有点新鲜,我使用的版本有些陈旧(1.x)。我正在处理的应用程序无论如何都无法更新。我有以下架构:
<table name="blog">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="title" type="varchar" size="100" required="true" />
<column name="user_id" type="integer" required="false" />
<column name="author" type="varchar" size="100" required="true" default="Anonimous" />
<column name="body" type="longvarchar" required="true" />
<column name="publish_date" type="timestamp" required="true" />
<behavior name="timestampable" />
<behavior name="soft_delete" />
<behavior name="sluggable">
<parameter name="slug_pattern" value="{Title}" />
<parameter name="replace_pattern" value="/[^\w]+/u" />
<parameter name="replacement" value="-" />
<parameter name="separator" value="-" />
<parameter name="permanent" value="true" />
</behavior>
<foreign-key foreignTable="user">
<reference local="user_id" foreign="id"/>
</foreign-key>
</table>
<table name="comment">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="blog_id" type="integer" required="true" />
<column name="user_id" type="integer" required="false" default="-1" />
<column name="author" type="varchar" required="false" default="Anonimous" />
<column name="body" type="longvarchar" required="true" />
<foreign-key foreignTable="user">
<reference local="user_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="blog">
<reference local="blog_id" foreign="id"/>
</foreign-key>
<behavior name="timestampable" />
<behavior name="soft_delete" />
</table>
我需要通过查询博客表,&#34;每个&#34;的评论计数。博客。
这是我的控制器查询:
$posts = BlogQuery::create()
->orderByPublishDate('desc')
->filterBy('PublishDate', time(), "<")
->paginate($page, $maxPerPage);
我需要在每个记录中添加基于架构中所述的blog_id的属于该特定记录的注释计数
<foreign-key foreignTable="blog">
<reference local="blog_id" foreign="id"/>
</foreign-key>
任何人都可以帮我一把忙吗?
答案 0 :(得分:1)
您可以使用以下代码
BlogQuery::create('blog')
->leftJoinComment('comment')
->withColumn('COUNT(comment.id)', 'CommentCount')
->groupById()
->paginate($page, $maxPerPage);
现在您可以使用$ blog-&gt; getCommentCount()
答案 1 :(得分:0)
我从评论对话中得到了答案:
一个简单的解决方案就是使用
$posts[0]->countComments()
,它会为相应的Blog行的相关记录发出单独的COUNT(*)查询。
使用Twig,->countComments()
成功了。这将打印每篇博文的评论:
Comments: {{post.countComments()}}