在Yii中使用统计查询

时间:2012-12-03 06:46:12

标签: php mysql yii phpmyadmin

我正在尝试使用统计查询来查看在我的网站上发布的每个请求的提案数量。即,已登录用户发布的每个请求的提案数。我通过使用代码

获得所有用户的数量
return array(
   'serviceproposals' => array(self::HAS_MANY, 'Serviceproposal', 'ServiceRequestID'),
   'user' => array(self::BELONGS_TO, 'Buyer', 'user_id'),
   'postCount'=>array(self::STAT, 'serviceproposal', 'ServiceRequestID'),
             );

数据库:
    网友[USER_ID,姓名,密码],
    提供商[USER_ID,providercompany,providerdetails],
    买家[USER_ID,CONTACTINFO],
    ServiceRequest [ServiceRequestID,Buyer.user_id,细节,日期],
    ServiceProposal [ServiceProposalId,ServiceRequestID,Provider.user_id,服务,propsal_rate]

邀请所有建议......

1 个答案:

答案 0 :(得分:1)

为此,您需要将当前登录用户的user_id传递给STAT关系。

有两种实现方法,使用conditional query或使用Parameterized named scopes

  1. 条件查询。

    • 渴望加载:

      $obj= ServiceRequest::model()->with(array(
          'postCount'=>array('condition'=>'user_id = :param',
          'params' => array(':param' => $user_id))
      ))->findAll(); 
      
    • 延迟加载:

      $serviceRequestObject->postCount(array(
          'condition'=>'user_id = :param',
          'params' => array(':param' => $user_id)
      ));
      
  2. 参数化命名范围:
    在你的模型中

    public function postCountUser($fieldValue=5) {
        $this->getDbCriteria()->mergeWith(array(
            'condition' => 'user_id = :param',
            'params' => array(':param' => $fieldValue)
       ));
       return $this;
    }
    

    然后使用:

    • 渴望加载:

      ServiceRequest::model()->with('postCount')->postCountUser($user_id)->findAll();
      
    • 延迟加载:

      $serviceRequestObj->postCount->postCountUser($user_id);