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

818
24 сентября 2017, 00:31

И снова про фильтр и сортировку связанных моделей в 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 есть)

READ ALSO
Поиск по ключевым. Релевантность

Поиск по ключевым. Релевантность

Есть таблица с ключевыми словами и связками вида (ключевое слово -> id товара)Как грамотно сделать релеватность ?

230
планирование отправки письма в yii2

планирование отправки письма в yii2

мне надо заплонировать отправку письма после того как пройдет 5дней с data1_start, на email адреса заполненных данных

249
Как в yii2 подключить нужный appasset?

Как в yii2 подключить нужный appasset?

Я скопировать папку backend, перейменовал ее в apiПереписал конфиги, но appasset подключается с backend-а

302
Настроить чпу в htaccess

Настроить чпу в htaccess

Подскажите, пожалуйста, как настроить ЧПУ таким образом, чтобы ссылки типа site/indexphp/test?param=0 обрабатывал файл в корне index

297