1

統計クエリを使用して、自分のサイトに投稿された各リクエストのプロポーザルの数を取得しようとしています。つまり、ログインしたユーザーが投稿した各リクエストのプロポーザルの数です。コードを使用してすべてのユーザーの数を取得しています

return array(
   'serviceproposals' => array(self::HAS_MANY, 'Serviceproposal', 'ServiceRequestID'),
   'user' => array(self::BELONGS_TO, 'Buyer', 'user_id'),
   'postCount'=>array(self::STAT, 'serviceproposal', 'ServiceRequestID'),
             );

データベース:
User [user_id、name、password]、
Provider [user_id、providercompany、providerdetails]、
Buyer [user_id、contactinfo]、
ServiceRequest [ServiceRequestID、Buyer.user_id、details、date]、
ServiceProposal [ServiceProposalId、ServiceRequestID、Provider.user_id、 services、propsal_rate]

すべての提案が招待されています...

4

1 に答える 1

1

このためにuser_idは、現在ログインしているユーザーのをSTATリレーションに渡す必要があります。

これを実現するには、条件付きクエリを使用する方法と、パラメータ化された名前付きスコープを使用する方法の2つがあります。

  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);
      
于 2012-12-03T12:26:04.340 に答える