сортировка посредством DropDownList в CGridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):разумеется. выводите так же. relation.field
relation - имя связи
field - поле, что нужно вывести
в фильтрах andFilterWhere?
или в value фильтре?
не догоняю
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

Вам нужно вывести название в ячейке в таблице?

Вам нужно указать это в виде(в гриде):

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

'value' => 'relation.field' 
Yii2!
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):Вам нужно вывести название в ячейке в таблице?
Вам нужно указать это в виде(в гриде):

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

'value' => 'relation.field'
вывожу

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

'value' => 'severMapArtcats.id_cat', 
получаю

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

(не задано) 
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

Ну если у вас категории в 3 таблице то так
relation.relation_cat.name
Yii2!
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):Ну если у вас категории в 3 таблице то так
relation.relation_cat.name
так тоже "(не задано)"

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

'value' => 'severMapArtcats.severCategory.name' 
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

Ой блять, сори, путаю вас.

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

 ['class' => 'yii\grid\SerialColumn'],
 'severMapArtcats.severCategory.name'
 
попробуйте так, в value же колбек должен быть.
Yii2!
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

А нет, гоню, можно туда так писать. Почитайте про связи, я вам говорю просто смысл. Может быть ошиблись где то в названии.
Yii2!
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):Ну если у вас категории в 3 таблице то так
relation.relation_cat.name
вот как работает =

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

'value' => function ($model) {  
        $art = SeverArticle::findOne($model->id_art);
        $item = $art->items;
        return $item[0]->name;
}, 
так как есть метод с viaTable

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

public function getItems()
{
    return $this->hasMany(SeverCategory::className(), ['id_cat' => 'id_cat'])
        ->viaTable('sever_map_artcat', ['id_art' => 'id_art']);
} 
но так ведь получается запрос на каждую строку!
это ж неправильно ж!

вот что получается =
Изображение
Последний раз редактировалось styleroom 2015.04.23, 14:14, всего редактировалось 1 раз.
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):почитайте про with
http://www.yiiframework.com/doc-2.0/gui ... er-loading
в контексте какого момента моего кода?
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

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

$dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
 
Yii2!
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):

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

$dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
получаю

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

Call to a member function andFilterWhere() on a non-object
при попытке подключить к выборке еще одну таблицу

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

$query = SeverArticle::find();
$query = $query->with('severMapArtcats')->all();

$dataProvider = new ActiveDataProvider([
    'query' => $query,
]); 
Изображение
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

В провайдере нельзя использовать all()
Уберите его. Прямо к query и подпишите with с указанием связей.
Yii2!
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):В провайдере нельзя использовать all()
Уберите его. Прямо к query и подпишите with с указанием связей.
сделал - выборка прошла удачно
а дальше чего?
так =

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

'value' => 'severMapArtcats.id_cat', 
или так =

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

'value' => function ($data) {  
        return $data->id_cat;
}, 
ни то, ни то не работает
вывел датаПровайдер в виде через принт_р
а он пустой
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

Оставьте как у вас было. Добавьте with и сравните кол-во запросов с ним и без него. Вы поняли идею этого метода?
Yii2!
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):Оставьте как у вас было. Добавьте with и сравните кол-во запросов с ним и без него. Вы поняли идею этого метода?
нет не понял...
и даже не могу осознать что значит "как у вас было"... это как? по разному ведь было...
если не трудно - напишите свой вариант который бы вы вписали в ActiveDataProvider и в value
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

У вас показывалось и фильтровалось так как вы хотели?
Верните этот вариант. далее добавьте метод with в провайдер и сравните кол-во запросов. В документации есть очень хороший пример, который ярко раскрывает суть этого метода. Цитирую ключевое предложение:
By calling yii\db\ActiveQuery::with(), you instruct Active Record to bring back the orders for the first 100 customers in one single SQL statement. As a result, you reduce the number of the executed SQL statements from 101 to 2!
Пожалуйста, разберитесь в примере и все встанет на свои места.
Yii2!
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):
By calling yii\db\ActiveQuery::with(), you instruct Active Record to bring back the orders for the first 100 customers in one single SQL statement. As a result, you reduce the number of the executed SQL statements from 101 to 2!
это я понял
не могу понять что должно быть вызвано в value
styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

Re: сортировка посредством DropDownList в CGridView

Сообщение styleroom »

vitalik1183 писал(а):все встанет на свои места.
встало методом научного тыка
вот как работает =

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

'value' => 'items.0.name', 
а ведь напрашивается

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

'value' => 'items.name', 
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: сортировка посредством DropDownList в CGridView

Сообщение vitalik1183 »

Да про value оставьте как было. если это работало. Если нет - давайте будем разбираться, я же вам навскидку предлагал варианты.
Yii2!
Ответить