ani
(Aneesh)
March 11, 2013, 7:55am
1
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.
seenivasan
(Chellamnivas)
March 11, 2013, 9:31am
2
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
ani
(Aneesh)
March 11, 2013, 10:37am
3
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?
seenivasan
(Chellamnivas)
March 11, 2013, 11:57am
4
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,
));