在siteController中,我编写查询并将dataProvider数组传递给index.PHP以显示包含在表格中.在index.PHP中,我想显示成员名而不是memberID.为此,我编写了内部查询,并成功在命令提示符下成功运行.这里我无法打印名字而不是’member id’
public function actionIndex() { $query = new \yii\db\Query; $query->select(['member.firstName','complaint.practiceCode','complaint.id','complaint.description','member.firstName']) ->from(['complaint']) ->innerJoin(['member','complaint.memberID = member.id']) ->groupBy(['complaint.id']) ->where(['complaint.deleted' => 'N']); $query->createCommand();
这里我通过创建$dataProvider4来传递数据,但是我无法设置firstName而不是memberID的值.
$dataProvider4= new ActiveDataProvider([ 'query' => $query,'pagination' => false,]); return $this->render('index',[ 'dataProvider4'=>$dataProvider4]); <?= GridView::widget([ 'dataProvider'=>$dataProvider4,'summary'=>'Total'.' <b>'.$complaintModel.'</b> '.'Complaints','columns' => [ ['class' => 'yii\grid\SerialColumn'],'practiceCode',// 'memberID','description','status',],]); ?>
我通过dataProvider传递数据.
解决方法
由于您使用的是强大的框架,因此您最好让框架为您执行复杂的操作,而不是尝试编写自己的查询.这就是Yii的设计目标.在你的行动中尝试这一点.
public function actionIndex() { $query = Member::find()-> ->select(['firstName',complaint.practiceCode',complaint.id','complaint.description']) ->groupBy(['complaint.id']) ->joinWith('complaints')//Tells Yii to use the complains relation that we define below. By default it is an inner join ->where(['complaint.deleted' => 'N']); $dataProvider= new ActiveDataProvider([ 'query' => $query,]); return $this->render('index',[ 'dataProvider4'=>$dataProvider]);
在您的模型中,您需要定义可在查询中使用的关系;
public function getComplaints(){ return $this->hasMany(Complaints::className(),'memberID' => 'id'); }
这很有用,因为它可以让您在不必编写自己的查询的情况下获得投诉.
Yii将为您整理所有列名,并编写查询.