首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Propel ORM中从第二个表中获取行计数

在Propel ORM中从第二个表中获取行计数
EN

Stack Overflow用户
提问于 2015-05-27 21:16:39
回答 2查看 975关注 0票数 0

我在推动ORM方面还是比较新的,我使用的版本有点旧(1.x)。我正在开发的应用程序无论如何都不能更新。我有以下模式:

代码语言:javascript
复制
<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>

我需要通过查询博客表,评论计数“每个”博客条目。

以下是我的控制器查询:

代码语言:javascript
复制
$posts = BlogQuery::create()
        ->orderByPublishDate('desc')
        ->filterBy('PublishDate', time(), "<")
        ->paginate($page, $maxPerPage);

我需要在每个记录中添加一个属于该特定记录的注释的计数,它是基于模式中所述的blog_id的。

代码语言:javascript
复制
<foreign-key foreignTable="blog">
    <reference local="blog_id" foreign="id"/>
</foreign-key>

有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-29 17:22:44

我从一次评论谈话中得到了一个答复:

一个简单的解决方案就是使用$posts[0]->countComments(),它将为适当的博客行的相关记录发出单独的计数(*)查询。

->countComments()用Twig做了这个把戏。这将打印每个博客文章的评论:

代码语言:javascript
复制
Comments: {{post.countComments()}}
票数 0
EN

Stack Overflow用户

发布于 2016-03-29 15:37:45

您可以使用以下代码

代码语言:javascript
复制
BlogQuery::create('blog')
    ->leftJoinComment('comment')
    ->withColumn('COUNT(comment.id)', 'CommentCount')
    ->groupById()
    ->paginate($page, $maxPerPage);

现在您可以使用$blog->getCommentCount()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30493294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档