Опять не работает поиск

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 481
Зарегистрирован: 2018.02.12, 22:41

Опять не работает поиск

Сообщение svil » 2019.07.13, 18:43

Сортировка поля name работает, поиск -нет

Код: Выделить всё

   public function actionIndex($course_id)
    {
        $item='groups';
        $this->view->params['news'] = $item;

        $id = Yii::$app->request->get('course_id');

        $searchModel = new MaterialsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider->query->Where(['materials.basket'=> '0']);
        $dataProvider->query->andWhere(['materials.course_id'=> $id]);
        // И так пробовала - не помогло
//        $dataProvider->query->andwhere(
//            ['or',
//               ['materials.course_id'=> $id],
//                ['materials.basket'=> '0']
//            ]
//        );
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }
MaterialsSearch

Код: Выделить всё

<?php

namespace app\models;

use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\Materials;

/**
 * MaterialsSearch represents the model behind the search form of `app\models\Materials`.
 */
class MaterialsSearch extends Materials
{
    public $categoryName;
 //   public $courseName;
    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['id', 'course_id', 'category_id', 'finish', 'basket'], 'integer'],
           [['name', 'finish'], 'safe'],
            [['categoryName'], '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 = Materials::find();

        // add conditions that should always apply here

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
        $dataProvider->setSort([
            'attributes' => [
                'id',
                'name',
                'categoryName' => [
                    'asc' => ['categories.name' => SORT_ASC],
                    'desc' => ['categories.name' => SORT_DESC],
                    'label' => 'Категория'
                ],
                'finish',

            ]
        ]);


        $this->load($params);

        if (!$this->validate()) {
            // uncomment the following line if you do not want to return any records when validation fails
            // $query->where('0=1');
            $query->joinWith(['categories']);
            return $dataProvider;
        }

        // grid filtering conditions
        $query->andFilterWhere(['like', 'materials.name', "%' . $this->name . '%"]);
        $query->joinWith(['categories' => function ($q) {
            $q->where('categories.name LIKE "%' . $this->categoryName . '%"');
        }]);

        return $dataProvider;
    }
}

Аватара пользователя
leonenco
Сообщения: 106
Зарегистрирован: 2017.01.30, 22:42

Re: Опять не работает поиск

Сообщение leonenco » 2019.07.13, 18:56

Попробуйте так:
после

Код: Выделить всё

$query = Materials::find();
$query->joinWith(['categories']);
...
// grid filtering conditions
$query->andFilterWhere(['like', 'materials.name', $this->name]);
$query->andFilterWhere(['like', 'categories.name', $this->categoryName]);
и исправьте:

Код: Выделить всё

if (!$this->validate()) {
            // uncomment the following line if you do not want to return any records when validation fails
            // $query->where('0=1');
            return $dataProvider;
        }

Ответить