我在Yii实施了我的项目。我在视图部分显示搜索结果。
我写了一个搜索查询,用于从一个表(Recipe)中获取结果。 在这个表名中,course_id,cuisinename,type,colorie_count分别是course_id,cuisinename,type分别是列。
在我的控制器中,我编写如下代码:
$result="SELECT * FROM recipe WHERE name LIKE '%$name%' AND `cuisinename` LIKE '$cuisine1%' AND course_id LIKE '%$course1%' AND `type` LIKE '%$type1%' AND `calorie_count` LIKE '%$calorie1%' ORDER BY recipe_id DESC LIMIT 15";
价值越来越高。如果我给出条件基于显示搜索结果文本。不显示所有名称。 但那些都是根据名字展示的。
我在视图中添加了部分条件和代码:
$query= Course::model()->find("course_id=$as1");
$course2=$query->course_name;
$query1= Cuisine::model()->find("id=$as4");
$cuisine2=$query1->cuisinename;
$query3= RecipeType::model()->find("id=$as3");
$type2=$query3->recipeType_name;
<?php echo '<p align="center"> Showing results for : '.'Name'.$getval.', '.'Course-'.$course2.', '.'Cuisine-'.$cuisine2.', '.'Type-'.$type2;', ';'</p>';
echo ', '.'Calories-'.$calorie;
?>
答案 0 :(得分:1)
您需要在表look there之间创建关系。对于Recipe模型,它应该是
public function relations()
{
return array(
'cuisine'=>array(self::BELONGS_TO, 'Cuisine', 'cuisine_id'),
'type'=>array(self::BELONGS_TO, 'RecipeType', 'type_id'),
);
}
然后您可以获得$ model-&gt; cuisine-&gt; name的值。如果您不了解创建关系,请使用gii生成模型(表格必须是正确的外键)。
答案 1 :(得分:1)
查看这篇文章:http://www.yiiframework.com/doc/guide/1.1/en/database.arr关于AR中的关系
class Recipe extends CActiveRecord
{
......
public function relations()
{
return array(
'course'=>array(self::BELONGS_TO, 'Course', 'course_id'),
'cuisine'=>array(self::BELONGS_TO, 'Cuisine', 'cuisine_id'),
'type'=>array(self::BELONGS_TO, 'RecipeType', 'type_id'),
);
}
}
及相关模型
class RecipeType extends CActiveRecord
{
......
public function relations()
{
return array(
'recipes'=>array(self::HAS_MANY, 'Recipe ', 'type_id'),
);
}
}
,你的搜索查询将在控制器文件中像这样:
$criteria=new CDbCriteria;
$criteria->with=array(
'course',
'cuisine',
'type',
);
$criteria->addCondition('course.course_id = :filter_course'); // for ID compares
$criteria->addSearchCondition('cuisine.name', $cuisinename) //for LIKE compares
...
$criteria->params = array(':filter_course' => intval($course1));
$searchResults = Receipe::model()->findAll($criteria);
并在您的视图中,您可以获得相关的表值:
foreach ($searchResults as $result){
echo $result->cuisine->name;
}
另请查看http://www.yiiframework.com/doc/api/1.1/CDbCriteria了解详情
您还可以使用此$条件在视图文件中为CListView或CGridView助手创建DataProdier
$dataProvider=new CActiveDataProvider( Receipe::model()->cache(5000),
array (
'criteria' => $criteria,
'pagination' => array (
'pageSize' => 10,
)
)
);
$this->render('search',array(
'dataProvider'=>$dataProvider
));