繁体   English   中英

Yieach查询foreach循环内的搜索模型

[英]Yii2 query of search model inside foreach loop

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

我正在使用yii2 Advanced。

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

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

试试这个简单的方法

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

您可能希望将所有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,
            ]
        ]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM