2017-11-02 4 views
0

이것은 내 코드이지만 마지막으로 삽입 한 사용자 만 출력합니다. 특정 비즈니스에 등록 된 다른 사용자는 표시하지 않습니다. 사용자는 자신의 비즈니스에 등록 된 사용자 만 볼 수 있습니다. 미리 감사드립니다.foreach 루프 내의 검색 모델에 대한 Yii2 쿼리

나는 yii2 고급을 사용하고 있습니다. user_tbl (user.id, user.username, user.email)

  • 두 번째 테이블 - - userinfo_tbl (info.id, info.userid, info.business

    나는 3 개 테이블

    • 첫 번째 테이블이 ID)
    • 세 번째 테이블 - Business_tbl (business.id, business.name)

      public function search($params) 
          { 
          //current user logedin 
           $CurrentUserID = Yii::$app->user->getId(); 
      
          //Find business to which current user is registered 
           $BusinessID = Yii::$app->mycomponent->getBusinessID($CurrentUserID); 
      
          //Now find all the users with this business id 
           $BusinessUsers= Yii::$app->mycomponent->getBusinessUsersID($BusinessID); 
      
           foreach ($BusinessUsers as $BusinessUser) 
            { 
            $UID=$BusinessUser['user_id']; 
      
            } 
      
           $query = User:: find()->where(['id'=>$UID]); 
      
           $dataProvider = new ActiveDataProvider([ 
            'query' => $query, 
            'sort'=> ['defaultOrder' => ['id'=>SORT_ASC]], 
            'pagination' => [ 
             'pageSize' => $this->_pageSize, 
            ] 
           ]); 
      
  • +1

    'getBusinessUsersID' 메소드 코드를 보여주십시오. foreach 내부에서'$ UID ='를 매번 지정하고 마지막 값을 덮어 씁니다. 그대로이 코드는 전혀 이해가되지 않습니다. – ajmedway

    +0

    '$ UID [] = $ BusinessUser [ 'user_id']; ' –

    답변

    0

    I n your code = $ UID는 배열이어야합니다. 그렇지 않으면 항상 단일 ID를가집니다. $ businessUsers의 마지막 여기에 코드를 변경 :

    public function search($params) 
    { 
    //current user logedin 
        $CurrentUserID = Yii::$app->user->getId(); 
    
    //Find business to which current user is registered 
        $BusinessID = Yii::$app->mycomponent->getBusinessID($CurrentUserID); 
    
    //Now find all the users with this business id 
        $BusinessUsers= Yii::$app->mycomponent->getBusinessUsersID($BusinessID); 
    
        //check if $BusinessUsers has records... 
        $UID = yii\helpers\ArrayHelper::getColumn($BusinessUsers, 'user_id'); 
        $query = User:: find()->where(['in','id', $UID]); 
        $dataProvider = new ActiveDataProvider([ 
         'query' => $query, 
         'sort'=> ['defaultOrder' => ['id'=>SORT_ASC]], 
         'pagination' => [ 
          'pageSize' => $this->_pageSize, 
         ] 
        ]); 
    } 
    
    +0

    잘 했어 ... 굉장해. – aqeel

    0

    당신은 다음 쉼표로 구분 된 목록에있는 모든 ID의의를 넣어 귀하의 경우 조건에 IN 쿼리를 사용할 수있는 간단한 방법

    public function search($params) 
    { 
        //current user logedin 
        $CurrentUserID = Yii::$app->user->getId(); 
    
        //Find business to which current user is registered 
        $BusinessID = Yii::$app->mycomponent->getBusinessID($CurrentUserID); 
    
        //Now find all the users with this business id 
        $BusinessUsers= Yii::$app->mycomponent->getBusinessUsersID($BusinessID); 
        $UID = yii\helpers\ArrayHelper::map($BusinessUsers,'user_id','user_id'); 
    
        $query = User:: find()->where(['id'=>$UID]); 
        $dataProvider = new ActiveDataProvider([ 
         'query' => $query, 
         'sort'=> ['defaultOrder' => ['id'=>SORT_ASC]], 
         'pagination' => [ 
          'pageSize' => $this->_pageSize, 
         ] 
        ]); 
    
    0

    을보십시오.

    public function search($params) 
        { 
        //current user logedin 
         $CurrentUserID = Yii::$app->user->getId(); 
    
        //Find business to which current user is registered 
         $BusinessID = Yii::$app->mycomponent->getBusinessID($CurrentUserID); 
    
        //Now find all the users with this business id 
         $BusinessUsers= Yii::$app->mycomponent->getBusinessUsersID($BusinessID); 
    
         foreach ($BusinessUsers as $BusinessUser) 
          { 
          array_push($UID,$BusinessUser['user_id']); //put all IDs in an array 
          } 
         $UID = implode(',',$UID); //making it look like this 1,2,3,4 
         $query = User:: find()->where('id IN ('.$UID.')'); 
    
         $dataProvider = new ActiveDataProvider([ 
          'query' => $query, 
          'sort'=> ['defaultOrder' => ['id'=>SORT_ASC]], 
          'pagination' => [ 
           'pageSize' => $this->_pageSize, 
          ] 
         ]);