Задать вопрос

Как в Yii2 в dataProvider указать условие выбора?

Я создаю gridView на основе массива:
GridView::widget([
        'dataProvider' => new ArrayDataProvider([
            'allModels' => $user['friends']['items'],
            'sort' => [
                'attributes' => ['id', 'username', 'email'],
            ]
        ]),
        'columns' => [
        ...

А мне необходимо выбрать только таких $user['friends']['items'], где выполняется условие
isset($user['friends']['items']['set_phone']);

Как это сделать?
  • Вопрос задан
  • 839 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Onskills
    PHP: базовый курс
    1 месяц
    Далее
  • HTML Academy
    Бэкенд-разработчик для Addamant
    6 месяцев
    Далее
  • teamcoding
    TC200PY Разработка PHP веб-приложений на Yii2. Шаблон приложения advanced
    3 месяца
    Далее
Решения вопроса 1
qonand
@qonand
Software Engineer
DataProvider - не отвечает за условие выбора, Вам нужно фильтровать массив до его передачи в DataProvider, например с помощью array_filter
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@devian3000
Не надо использовать array_filter на DataProvider!

Откройте документацию, там всё написано
nix-tips.ru/yii2-razbiraemsya-s-gridview.html

Если в примере, то используйте searchModel!

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'rowOptions'=>function ($model, $key, $index, $grid){
        $class=$index%2?'odd':'even';
        return [
            'key'=>$key,
            'index'=>$index,
            'class'=>$class
        ];
    },
]); ?>
Ответ написан
Комментировать
@mixka
Также как в ActiveDataProvider

$query = new \yii\db\Query;
$dataProvider = new \yii\data\ArrayDataProvider([
'allModels' => $query->from('o_oem_detal')
->select('id')
->andWhere(['or LIKE', 'oem', '%'.$out_oem.'%', false])
->andWhere(['between', 'date(date)', $time, $time2])
->all(),
]);

И даже полнотекстовый поиск массивом
$oem = [11, 17, sdsdf, qwerrt ];
$query = new \yii\db\Query;
$data = new \yii\data\ArrayDataProvider([
'allModels' => $query->from('oem')
->andWhere("MATCH(naim) AGAINST ('$oem' IN BOOLEAN MODE)")
->limit(10)
->all(),
]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы