22
Сен
2017

Сортировка и фильтр поля из связанной модели Yii2

И снова про фильтр и сортировку связанных моделей в Yii2 если позволите... сделал все по инструкции но не работает, если не затруднит ткните носом где неправда. Есть 2 модели User и Order, у одного User может быть несколько Order, у Order соответственно только 1 User, связаны через user.id = order.user_id что описано в связях yii:

User.php

public function getOrder()
{
    return $this->hasMany(Order::className(), ['user_id' => 'id']);
}

Order.php

public function getUser()
{
    return $this->hasOne(User::className(), ['id' => 'user_id']);
}

Есть класс OrderSearch.php, в котором добавлено поле, которое мне надо получить из таблица user - email, туда соответственно добавлена переменная

public $email;
...

public function rules()
    {
        return [
            .....
            [['email'], 'safe']
        ];
    }

Сортировку и фильтр хочу производить по id заказа, date и как раз полю email.

$dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

    $dataProvider->setSort([
        'attributes' => [
            'id',
            'date',
            'email' => [
                'asc' => ['user.email' => SORT_ASC],
                'desc' => ['user.email' => SORT_DESC],
                'label' => 'Email'
            ]
        ]
    ]);

Жадная загрузка данных модели

if (!($this->load($params) && $this->validate())) {
            $query->joinWith(['user']);
            return $dataProvider;
        }

Далее

$query->andFilterWhere......
            ->andFilterWhere(['like', 'user.email', $this->email]);

        return $dataProvider;

В OrderController.php

...
        $searchModel = new OrderSearch();
        $dataProvider = searchModel->search(Yii::$app->request->queryParams);
...

И сама вьюшка index.php

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'id',
            'date',
            'summ',
            'delivery_summ',
            'delivery_rus',
            'email',
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]);
...

В таком случае ошибка Getting unknown property: app\models\Order::email

Если ставим вместо 'email' - 'user.email' то все отображается, но нет фильтра и сортировки на этом поле (на id и date есть)

Источник: https://ru.stackoverflow.com/questions/721699/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80-%D0%BF%D0%BE%D0%BB%D1%8F-%D0%B8%D0%B7-%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D0%BE%D0%B9-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8-yii2

Share

Тебе может это понравится...