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

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

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

Сообщение styleroom »

всем привет
нужно реализовать возможность сортировки записей в GridView посредством выпадающего списка
есть три таблицы и отношения hasMany со связующей таблицей sever_map_artcat
sever-article -> sever_map_artcat <- sever_category

что было в самом начале:
Изображение

как есть сейчас:
Изображение
сортировка, не производится по номеру id_cat ибо не знаю как этого достичь во вновь созданной колонке

дополнительную колонку вывожу так:

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

[
	'attribute' => 'id_art',
	'label' => 'Категория',
	'value' => function($data){
		return '';
	},
	'filter' => ArrayHelper::map(
			SeverCategory::find()
					->orderBy('id_cat')
					->asArray()->all(),
			'id_cat','name'),
	'options' => ['width' => '120'],
], 
где id_art поставлен от безысходности, а value заполняю пустотой ибо не знаю как туда вставить название категории

есть два метода в модели SeverArticle:

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

public function getSeverMapArtcats()
{
    return $this->hasMany(SeverMapArtcat::className(), ['id_art' => 'id_art']);
}

public function getItems()
{
    return $this->hasMany(SeverCategory::className(), ['id_cat' => 'id_cat'])
        ->viaTable('sever_map_artcat', ['id_art' => 'id_art']);
}
короче - не выходит каменный цветок у данилы-мастера
ай нид ё хелп!

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

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

Сообщение vitalik1183 »

Вам нужно вывести значения относительно заданного фильтра?
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

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

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

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

Сообщение vitalik1183 »

Вы пишете фильтр, но вам нужна возможность сортировки. Что в вашем понятии сортировка?
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

vitalik1183 писал(а):Вы пишете фильтр, но вам нужна возможность сортировки.
фильтр пишу потому, что нашел в сети хелп демонстрирующий возможность вывода DropDownList
vitalik1183 писал(а):Что в вашем понятии сортировка?
сортировка - это показ в GridView только тех записей, которые соответствуют выбранному пункту из доп.колонки
обычный поиск, только без поля input

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

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

Сообщение vitalik1183 »

Это называется фильтр. Сортировка это например вывести в порядке убывания или возрастания. Вы путайте понятия. Вам нужен вывод относительно фильтра.
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

vitalik1183 писал(а):Это называется фильтр. Сортировка это например вывести в порядке убывания или возрастания. Вы путайте понятия. Вам нужен вывод относительно фильтра.
ааа... большое спасибо за науку!
ну, значит мне нужен вывод относительно фильтра :D

Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

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

Сообщение Alex8552 »

где провайдер генерируете ?

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

Alex8552 писал(а):где провайдер генерируете ?
в контроллере

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

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

return $this->render('index', [
    'searchModel' => $searchModel,
    'dataProvider' => $dataProvider,
]); 

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

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

Сообщение vitalik1183 »

Метод search покажите.
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

vitalik1183 писал(а):Метод search покажите.
там все стандартно - из Gii

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

public function search($params)
{
    $query = SeverArticle::find();

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

    $this->load($params);

    if (!$this->validate()) {
        return $dataProvider;
    }

    $query->andFilterWhere([
        'id_art' => $this->id_art,
        'dt' => $this->dt,
    ]);

    $query->andFilterWhere(['like', 'href', $this->href])
        ->andFilterWhere(['like', 'name', $this->name])
        ->andFilterWhere(['like', 'content', $this->content])
        ->andFilterWhere(['like', 'sticky', $this->sticky])
        ->andFilterWhere(['like', 'type', $this->type])
        ->andFilterWhere(['like', 'show', $this->show]);

    return $dataProvider;
} 

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

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

Сообщение vitalik1183 »

id_cat и пишите. Причем здесь id_art?
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

vitalik1183 писал(а):id_cat и пишите. Причем здесь id_art?
если я напишу id_art, то получу отлуп =

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

Setting unknown property: app\models\adm\SeverSearch::id_cat
SeverSearch наследуется от SeverArticle, а в той таблице нет поля id_cat
поле id_cat есть в таблице SeverCategory
пс: есть модель связующая SeverMapArtcat - может на ее основе надо мутить поиск?

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

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

Сообщение vitalik1183 »

severcategory.id_cat
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

vitalik1183 писал(а):severcategory.id_cat
при выводе новой колонки где это должно быть?
так?

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

'attribute' => 'severcategory.id_cat', 

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

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

Сообщение vitalik1183 »

не не, в эту конструкцию andFilterWhere
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

vitalik1183 писал(а):не не, в эту конструкцию andFilterWhere
сорри, конечно за тупость, но как?
так

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

->andFilterWhere(['like', 'severcategory.id_cat', $this->id_cat]) 
или так

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

 ->andFilterWhere(['like', 'id_cat', 'severcategory.id_cat']) 

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

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

Сообщение vitalik1183 »

Зачем вам лайк?

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

->andFilterWhere(['severcategory.id_cat' => $this->attr])  
Yii2!

styleroom
Сообщения: 70
Зарегистрирован: 2012.01.11, 08:51
Откуда: Долгопрудный

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

Сообщение styleroom »

vitalik1183 писал(а):Зачем вам лайк?

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

->andFilterWhere(['severcategory.id_cat' => $this->attr]) 
да, точно! спасибище!
вот как сработало

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

->andFilterWhere(['sever_map_artcat.id_cat' => $this->id_cat])
видимо из-за того, что hasMany привязан к таблице посреднику =

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

public function getSeverMapArtcats()
{
    return $this->hasMany(SeverMapArtcat::className(), ['id_art' => 'id_art']);
} 
пс: а есть ли вариант выводить названия категорий в этом новом поле? ну, под выпадающим списком

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

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

Сообщение vitalik1183 »

разумеется. выводите так же. relation.field
relation - имя связи
field - поле, что нужно вывести
Yii2!

Ответить