【问题标题】:Yii2 query of search model inside foreach loopYii2 查询 foreach 循环内的搜索模型
【发布时间】:2017-11-03 07:43:11
【问题描述】:

这是我的代码,但它只输出最后插入的用户。我的意思是它不显示注册到特定企业的其他用户。用户应该只看到在他的公司注册的用户。在此先感谢

我正在使用yii2 高级。

我有 3 张桌子

  • 第一个表 - user_tbl(user.id、user.username、user.email)
  • 第二张表 - userinfo_tbl(info.id, info.userid, info.business 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,
                ]
            ]);
    

【问题讨论】:

  • 请告诉我们getBusinessUsersID方法代码。在 foreach 中,您每次都分配 $UID= 并覆盖最后一个值。就目前而言,这段代码毫无意义。
  • $UID[] = $BusinessUser['user_id'];

标签: php yii2


【解决方案1】:

在您的代码中 = $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,
        ]
    ]);
}

【讨论】:

    【解决方案2】:

    试试这个简单的方法

    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,
            ]
        ]);
    

    【讨论】:

      【解决方案3】:

      您可能希望将所有 ID 放在逗号分隔的列表中,然后在 where 条件中使用 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);
      
               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,
                  ]
              ]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-15
        • 1970-01-01
        • 2015-08-18
        • 2012-05-01
        • 1970-01-01
        • 2014-05-14
        相关资源
        最近更新 更多