如何使用主键显示另一个表的值

时间:2014-04-11 06:09:49

标签: php yii

我在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&nbsp:&nbsp'.'Name'.$getval.',&nbsp'.'Course-'.$course2.',&nbsp'.'Cuisine-'.$cuisine2.',&nbsp'.'Type-'.$type2;',&nbsp';'</p>'; 
echo ',&nbsp'.'Calories-'.$calorie;
?> 

2 个答案:

答案 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         
    ));

http://www.yiiframework.com/doc/api/1.1/CListView/

http://www.yiiframework.com/doc/api/1.1/CGridView