在siteController
中,我编写查询并将dataProvider
的数组传递给index.php
以显示包含在表格中。在index.php
我希望显示member name
而不是memberID
。为此,我编写了内部查询,并成功在命令提示符下成功运行。这里我无法打印first name
而不是“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传递数据。
答案 0 :(得分:1)
由于您使用的是强大的框架,因此您最好让框架为您执行复杂的操作,而不是尝试编写自己的查询。这就是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,
'pagination' => false,
]);
return $this->render('index', [
'dataProvider4'=>$dataProvider]);
在模型中,您需要定义可在查询中使用的关系;
public function getComplaints(){
return $this->hasMany(Complaints::className(), 'memberID' => 'id');
}
这很有用,因为它可以让您在不必编写自己的查询的情况下获得投诉。
Yii将为您整理所有列名,并编写查询。
答案 1 :(得分:0)
该查询与dataProvider无关,因此无法使用
如果要扩展查询,则应执行此操作并分配给dataprovider中使用的查询,而不仅仅是执行查询。 无论如何,你可以使用匿名函数获取成员的名称来检索值;
<?= GridView::widget([
'dataProvider' => $dataProvider4,
//'summary'=>'Total'.' <b>'.$complaintModel.'</b> '.'Complaints',
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'practiceCode',
/* ['attribute' => '',
'value' => function ($model) {
$myMemberModel = Member::find()->
where(['id'=> $model->memberID ])->one();
if (isset($myMemberModel) {
return $myMemberModel->firtsName;
} else {
return ' id : '. $model->memberID . ' do not match ';
}
}],*/
'firstName',
'memberID',
'description',
'status',
],
]);
?>