Search

In a model(Developer) have following fields- id, name, platform. In the data are (1, abc, PHP), (2, xyz, JAVA). If user will search with this "java and php" in this model, i want to compare each term with the platform field and show both result as a search result. How it possible?

Thanks.

Dear Friend

You can construct search method in the following way.





public function search()

{


                $criteria=new CDbCriteria;


                $criteria->compare('id',$this->id);

                $criteria->compare('name',$this->name,true);


               

                if(isset($this->platform))

                {

                        $words=explode(' ',$this->platform);

                        foreach($words as $word)

                            $criteria->addSearchCondition('platform',$word,true,"OR");

                 }

                return new CActiveDataProvider($this, array(

                        'criteria'=>$criteria,

                ));




Regards

Thanks.

i also added a filter radio button list in the list view.

index.php


<?php echo CHtml::radioButtonList('type','',array('1'=>'Individual',

                '2'=>'Company'),array('id'=>'type')

                );

                ?> 

<?php

//THE WIDGET WITH ID AND DYNAMICALLY MADE SORTABLEATTRIBUTES PROPERTY


$this->widget('zii.widgets.CListView', array(

        'id'=>'user-list',

        'dataProvider'=>$dataProvider,

        'itemView'=>'results',

        'sortableAttributes'=>$sortAttr,

        'template' => '{sorter}{items}{pager}',

));

Yii::app()->clientScript->registerScript('type','

$("#type").change(function()

        {       

            $.fn.yiiListView.update("user-list",{data:{type:$(this).val()}}) 

           

        });

');

?>



controller


$key=$_GET['Text'];

$criteria = new CDbCriteria();

           $criteria->select = "`username`";

           $words=explode(' ',$key);

           foreach($words as $word)

           {

            $criteria->addsearchCondition('platform',$word,true,"OR");

           }

           if(isset($_GET['type']))

               {

                $criteria->addCondition("user_type=:status");

                $criteria->params=array(":status"=>$_GET["type"]);

               }

           $data=new CActiveDataProvider('User',

                   array('criteria'=>$criteria,'pagination'=>array('pageSize'=>5),


            ));


           $this->render('search', array(

           'ModelInstance' => Developer::model()->findAll($criteria),

           'dataProvider'=>$data,'sortAttr'=>$sortAttr,


            ));

The result page not reloaded with filter. Wats the mistake?

I think We are employing two models.

We need two seperate search criteria here.




$developerCriteria = new CDbCriteria();

$userCriteria = new CDbCriteria();

          

       if(isset($_GET['Text']))

       {

           $developerCriteria->select = "`username`";

           $words=explode(' ',$_GET['Text']);

           foreach($words as $word)

                $developerCriteria->addSearchCondition('platform',$word,true,"OR");           

       }


       if(isset($_GET['type']))

       {

           $userCriteria->addCondition("user_type=:status");

           $userCriteria->params=array(":status"=>$_GET["type"]);

       }

           

        $data=new CActiveDataProvider('User',

                   array('criteria'=>$userCriteria,'pagination'=>array('pageSize'=>5),

            ));


        $this->render('search', array(

            'ModelInstance' => Developer::model()->findAll($developerCriteria),

            'dataProvider'=>$data,'sortAttr'=>$sortAttr,

            ));