2013-12-16 57 views
0

模型的GridView这是代码,如何使用左连接的SQL查询结果到警予

$model=new Tblvehicle; 

$sql="Select tblvehicle.serial_no, tblmodel.description, tbluser.user_name, tbluser.user_code " 
    . "From tblvehicle" 
    . " left join tblmodel " 
    . "on tblvehicle.model_code= tblmodel.model_code" 
    . " left join tbluser" 
    . " on tblvehicle.user_code=tbluser.user_code"; 
$query= Yii::app()->db->createCommand($sql)->queryScalar(); 
$dataProvider = new CSqlDataProvider($sql, array('totalItemCount'=>$query)); 

$this->render('index',array(
    'model'=>$model,'dataProvider'=> $dataProvider)); 

,这是我不完全Tblvehicle网格视图 -

$this->widget('zii.widgets.grid.CGridView', array(
       'id'=>'tblvehiclegrid', 
       'dataProvider'=>$dataProvider, 
       'filter'=>$model, 
       'columns'=>array(

现在我该怎么让那4列serial_no, description, user_name,user_code?因为这些来自不同的表,我不知道如何将它们加入。

'columns'=>array(

也许我试图做到这一点的方法也是错误的。所以请在这方面需要一些帮助,我对Yii很新。

回答

1

这是必要的控制器代码

$criteria=new CDbCriteria(); 
$dataProvider=new CActiveDataProvider('Tblvehicle', array(
                'criteria'=>$criteria, 
                'pagination'=>array(
                 'pageSize'=>5, 
                 ), 
             )); 

return $dataProvider; 

$this->render('index',array(
'model'=>$model,'dataProvider'=> $dataProvider)); 

添加以下行至Tblvehicle模型的关系,部分看起来像这样,只用两个4个的关系,了解为什么代码中的注释

public function relations() 
{ 
    // NOTE: you may need to adjust the relation name and the related 
    // class name for the relations automatically generated below. 
    return array(


     'rl_model'=>array(self::BELONGS_TO, 'Tblmodel', 'model_code'),//presuming that model_code is the primary key of this table if not use the two below 
     'rl_user'=>array(self::BELONGS_TO, 'Tbluser', 'user_code'),//presuming that user_code is the primary key of this table if not use the two below 

     'rl_model' => array(self::BELONGS_TO, 'Tblmodel', '', 'foreignKey' => array('model_code'=>'model_code')), //Non Primary field 
     'rl_user' => array(self::BELONGS_TO, 'Tbluser', '', 'foreignKey' => array('user_code'=>'user_code')), //Non Primary field 
    ); 
} 

然后在视图中使用此

'columns'=>array(
        'serial_no', 
        'subject', 
        array(
         'name'=>'Description Code', 
         'value'=>'$data->rl_model->description', 
        ), 

        array(
         'name'=>'Username', 
         'value'=>'$data->rl_user->user_name', 
        ), 
        array(
         'name'=>'User Code', 
         'value'=>'$data->rl_user->user_code', 
        ), 

       ), 

基本上而大于h为了编写mysql语句并使用连接,我们可以使用关系有效地创建连接。这个字段随后可以在任何时候被引用,如上所示。

让我知道你如何继续。

+0

Thnx很多先生对此感到疯狂。它正在工作。只有小小的改正。我认为我们需要使用“标题”,而不是“名称”。 – Farhad

+0

@Farhad没问题。我之所以使用'name'的原因实际上是因为你无法排除你的自定义列而没有更多的摆弄。这篇文章http://www.yiiframework.com/forum/index.php/topic/8784-cgridview-sort-columns/page__p__232077#entry232077将告诉你如何排序他们,如果你需要这个。但是,在你的情况下,你的方式是正确的。很高兴我能帮上忙。 –