@AlexSer

Как произвести фильтрацию нажатием ссылки Yii2?

Еще один вопрос про фильтрацию данных. Вот скрин:
5ab22e6a8527a749925119.jpeg
Мне надо от флиртовать только пациентов пользователя нажатием кнопки "мои пациенты".
т.е при нажатий кнопки сперва должен отфильтроваться по пользователю, а затем уже по Фамилий и имени
<?php

namespace frontend\models;

use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;

use frontend\models\History;

/**
 * SearchPacients represents the model behind the search form of `frontend\models\History`.
 */
class SearchPacients extends History
{
    public  $family;
    public  $name;
    public  $otchestvo;
    public  $filtr;
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['id', 'pacient_id', 'standart_id', 'doctor_id', 'otdelenie_id', 'status_id', 'type_analiz_id', 'organization_id', 'napravlenie_id', 'lu'], 'integer'],
            [['date','family' ,'name','date_close'], 'safe'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function scenarios()
    {
        // bypass scenarios() implementation in the parent class
        return Model::scenarios();
    }

    /**
     * Creates data provider instance with search query applied
     *
     * @param array $params
     *
     * @return ActiveDataProvider
     */
    public function search($params)
    {
        $query = History::find();
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
        $dataProvider->setSort([
            'attributes' => [
                'id',
                'family' => [
                    'label' => 'Фамилия',
                    'default' => SORT_ASC
                ],
                'name' => [
                    'label' => 'Имя',
                    'default' => SORT_ASC
                ],
                'otchestvo' => [
                    'label' => 'Отчество',
                    'default' => SORT_ASC
                ],
                'dr' => [
                    'label' => 'Дата рождение',
                    'default' => SORT_ASC
                ],
            ]
        ]);

        if (!($this->load($params) && $this->validate())) {
            /**
             * Жадная загрузка данных модели Страны
             * для работы сортировки.
             */
            $query->joinWith(['pacients']);
            return $dataProvider;
        }

        //$this->addCondition($query, 'id');
     //   $this->addCondition($query, 'family', true);
        $this->filtr=Yii::$app->user->id;
        $query->andFilterWhere(['doctor_id'=>$this->filtr]);





        // Фильтр по стране
       $query->joinWith(['pacients' => function ($q) {
        $q->where('pacients.family LIKE "%' . $this->family. '%"');
       }]);
      $query->joinWith(['pacients' => function ($q) {
          $q->where('pacients.name LIKE "%' . $this->name. '%"');
     }]);
       $query->joinWith(['pacients' => function ($q) {
           $q->where('pacients.otchestvo LIKE "%' . $this->otchestvo. '%"');
       }]);

        return $dataProvider;
    }
}

Сейчас он работает наоборот. Если нажимаю Мои пациенты, никакой реакции.
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Search модель строит фильтрацию на базе пришедших в get запросе данных, так что просто сформируйте нужную ссылку, в которой будут необходимые параметры.
Что-то типа
Html::a('моиПациенты',['someController/someAction','MySearchModelName'=>[
'doctor_id' => Yii::$app->user->id
]])

c сортировкой по имени та же песня, просто добавьте параметр в url.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы