在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将为您整理所有列名,并编写查询.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。