从Propel ORM中的第二个表中获取行数

时间:2015-05-27 21:16:39

标签: php symfony propel

我对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>

任何人都可以帮我一把忙吗?

2 个答案:

答案 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()}}