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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

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

Сообщение Artikk »

Здравствуйте. Делаю поиск:

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

  <form method="get" id="form" action="<?php echo \yii\helpers\Url::to(['search/index'])?>">
            <div class="col-md-3 col-sm-3 col-xs-12">
                <select class="pole_s" name="blogers">
                    <option value="">Выберите блогера</option>
                    <?php foreach($blogers as $bloger):?>
                    <option value="<?= $bloger->id?>"><?= $bloger->title?></option>
                    <?php endforeach;?>
                </select>
            </div>
            <div class="col-md-3 col-sm-3 col-xs-12">
                <select class="pole_s" name="colors">
                    <option value="">Цвет</option>
                    <?php foreach($colors as $color):?>
                        <option value="<?= $color->id?>"><?= $color->title?></option>
                    <?php endforeach;?>
                </select>
            </div>
            <div class="col-md-3 col-sm-3 col-xs-12">
                <select class="pole_s" name="razmer">
                    <option value="">Размер</option>
                    <?php foreach($razmer as $raz):?>
                        <option value="<?= $raz->title?>"><?= $raz->title?></option>
                    <?php endforeach;?>
                </select>
            </div>
            <div class="col-md-3 col-sm-3 col-xs-12">
                <select class="pole_s" name="models">
                    <option value="">Модель</option>
                    <?php foreach($models as $model):?>
                        <option value="<?= $model->id?>"><?= $model->title?></option>
                    <?php endforeach;?>
                </select>
            </div>
            <div class="col-md-3 col-sm-3 col-xs-12">
                <button class="submit_s" form="form">Подобрать</button>
            </div>
        </form>
Вот контроллер:

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

class SearchController extends AppController
{
	public function actionIndex(){
		$blogers = Yii::$app->request->get('blogers');
		$colors = Yii::$app->request->get('colors');
		$razmer = Yii::$app->request->get('razmer');
		$r = '.'.$razmer.'.';
		$models = Yii::$app->request->get('models');
		
		$query = Product::find()
			->andFilterWhere(['category_id' => $blogers])
			->andFilterWhere(['color' => $colors])
			//->andFilterWhere(['like', 'razmer',$r])
			->andFilterWhere(['models' => $models]);
			
		$pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => 16, 'forcePageParam' => false, 'pageSizeParam' => false]);
		$products = $query->offset($pages->offset)->orderBy(['id'=>SORT_DESC])->limit($pages->limit)->all();
		return $this->render('index', compact('products', 'pages'));
	}

}
Без этой строки все ищет: ->andFilterWhere(['like', 'razmer',$r])
а с ней - нет. почему? мне именно так нужно искать. подскажите, как исправить?
Последний раз редактировалось Artikk 2018.02.13, 16:03, всего редактировалось 1 раз.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Поиск по нескольким параметрам

Сообщение Artikk »

razmer нужно искать именно так, потому что в таблице запись имеет вид: .XXL.XXXL.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Поиск по нескольким параметрам

Сообщение ElisDN »

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

if (!empty($razmer)) {
    $query->andWhere(['like', 'razmer', '.'.$razmer.'.'])
}
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Поиск по нескольким параметрам

Сообщение Artikk »

Работает... А почему нельзя, как я сделал?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Поиск по нескольким параметрам

Сообщение ElisDN »

Или тогда сделать так:

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

$r = !empty($razmer) ?  '.' . $razmer . '.' : null;

$query = Product::find()
    ->andFilterWhere(['category_id' => $blogers])
    ->andFilterWhere(['color' => $colors])
    ->andFilterWhere(['like', 'razmer',$r])
    ->andFilterWhere(['models' => $models]);
Ответить