Yii2-запрос поисковой модели внутри цикла foreach

Это мой код, но он выводит только последнего вставленного пользователя. Я имею в виду, что на нем не отображаются другие пользователи, зарегистрированные для определенного бизнеса. Пользователь должен видеть только тех пользователей, которые зарегистрированы в его компании. заранее спасибо

я использую 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,
    ]
    ]);
    

0

Решение

В вашем коде = $ UID должен быть массив, иначе у него всегда будет один идентификатор. последнее в ваших $ 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

Другие решения

Попробуйте этот простой способ

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

Возможно, вы захотите поместить все идентификаторы в список с разделителями-запятыми, а затем использовать 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,
]
]);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector