【问题标题】:get count in relation table in yii2 Activerecord在 yii2 Activerecord 中的关系表中获取计数
【发布时间】:2014-11-12 19:30:03
【问题描述】:

我有两个表用于发布和用户。我想在用户列表 gridview 中显示用户的帖子数。在 yii 1 中,我在模型中使用它来为此目的定义一个关系:

'postCount' => array(self::STAT, 'Post', 'author',
            'condition' => 'status = ' . Post::ACTIVE),

...
User:find...().with('postCount').....

但我不知道如何在 Yii2 中实现此功能以获取 User:find():with('...') 中的帖子计数以显示在 gridview 中。
有人在 yii2 中尝试过吗?

【问题讨论】:

标签: php activerecord yii yii2


【解决方案1】:

这是我所做的一个示例,到目前为止它似乎工作正常。它用于获取帖子上的 cmets 计数。我只是使用了一个标准的活动记录计数,并使用 $this->id 和条目的主键创建了与 where 语句的关系。

public function getComment_count()
{
    return Comment::find()->where(['post' => $this->id])->count();
}

只是路过...

【讨论】:

    【解决方案2】:

    你可以试试下面的代码:

    User::find()->joinWith('posts',true,'RIGHT JOIN')->where(['user.id'=>'posts.id'])->count();
    

    或者,如果您想指定用户数:

    //user id 2 for example
    User::find()->joinWith('posts',true,'RIGHT JOIN')->where(['user.id'=>'posts.id','user.id'=>2])->count();
    

    请注意,posts 是在您的 User 模型中定义的关系,如下所示:

    public function getPosts()
    {
        return $this->hasMany(Post::className(), ['user_id' => 'id']);
    }
    

    【讨论】:

    • 我想要用户的信息,包括帖子数、用户名、电子邮件、帖子数
    • @ArazJafaripur 好吧,将 count() 更改为 one()all() 并获取其计数
    • 返回的数据类型应该是ActiveQuery,因为数据必须在gridview中显示。 ->所有错误。
    • ummm :) 在您的dataProvider 中将其作为query 传递。看看yiiframework.com/doc-2.0/…yiiframework.com/doc-2.0/yii-db-activequery.html countryman :)
    • 我做了所有这些并显示了gridview,只是我在这里粘贴了部分代码。现在在 gridview 中,我想显示每个用户创建的帖子数。在 yii 1 中我也像上面的代码一样执行此操作,但在 Yii2 中我不知道如何执行此操作!
    【解决方案3】:

    好吧,我认为对于那些可能关心的人来说,如果您只是想要计数而不是数据,那么最好使用它来代替恕我直言:

    $count = (new \yii\db\Query())
    ->select('count(*)')
    ->from('table')
    ->where(['condition'=>'value'])
    ->scalar();
    
    echo $count;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多