2016-05-12 3 views
-1

Я новичок в структуре Yii, и теперь мне нужно создать функцию поиска в Yii2. Я уже нашел функцию поиска в Yii, которая выглядит точно так же, как функция, которая мне нужна.Функция поиска() в Yii до Yii2


Вот код:

public function searchDocuments($documentModel, $query, $content=false, $content_only=false) { 

    $criteria = new CDbCriteria(); 
    $criteria->with = array(
     'tags' // Tabel tbl_tag toevoegen via de relations. 
    ); 
    $criteria->compare('content', $query, true, "OR"); 
    $criteria->compare('description', $query, true, "OR"); 
    $criteria->compare('year', $query, true, "OR"); 
    $criteria->compare('title', $query, true, "OR"); 
    $criteria->compare('tags.slug', $query, true, "OR"); 
    $criteria->compare('title', $documentModel->title, true, "AND"); 
    $criteria->compare('description', $documentModel->description, true, "AND"); 
    $criteria->compare('tags.slug', $documentModel->tag_search, true, "AND"); 
    $criteria->compare('year', $documentModel->year, true, "AND"); 
    $criteria->compare('tags.state', 1 , false, "AND"); 
    $criteria->group = 't.id'; 

    $criteria->together = true; 

    return new CActiveDataProvider($documentModel, array(
      'pagination'=>array('pageSize'=>25), 
      'criteria' => $criteria, 
      'sort'=>array(
       'attributes'=>array(
        'tag_search'=>array(
         'asc'=>'tags.slug', 
         'desc'=>'tags.slug DESC', 
        ), 
        '*', 
       ), 
      ), 
     ) 
    ); 

} 
+0

Вы хотите функцию поиска для yii2? –

+0

Да, мне нужна модель поиска, которая может искать по нескольким моделям и использует для нее несколько функций. –

ответ

0

Использование Yii2 GII для генерации CRUD для вашей модели. Он генерирует модель ModelSearch и ее код содержит хороший пример кода поиска.

upd. Использовать модельные отношения и метод $ query-> joinWith() и фильтровать по связанной таблице.

// model 

public function getTags() 
{ 
    return $this->hasMany(Tags::className(), ['id' => 'document_id']); 
} 

// search model 

public function search($params) 
{ 
    ... 
    $query->joinWith(['tags' => function ($q) { 
     $q->where('tags.slug LIKE "%' . $this->tag . '%"'); 
    }]); 
    ... 
} 
+0

Спасибо, это то, что я искал –

0

В вашей модели

public static function search($params) 
{ 
    $query = self::find(); 
    $query->andWhere(['or','content',$params['content']]); 
    $query->andWhere(['like','title',$params['title'].'%',false]); 
    $query->with(['tags']); 
    $query->groupBy('id'); 
    $countQuery = clone $query; 
    $pages = new Pagination(['totalCount' => $countQuery->count(),'defaultPageSize'=>20]); 
    $datas = $query->offset($pages->offset) 
     ->limit($pages->limit) 
     ->all(); 
    return [ 
     'datas' => $datas, 
     'pages' => $pages 
    ]; 
} 
+0

Это похоже на то, что у меня есть поисковая модель, которая просматривает несколько моделей, а не только одну. –

Смежные вопросы