Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在yii2的网格视图中显示另一个表的数据?_Php_Gridview_Yii2 - Fatal编程技术网

Php 如何在yii2的网格视图中显示另一个表的数据?

Php 如何在yii2的网格视图中显示另一个表的数据?,php,gridview,yii2,Php,Gridview,Yii2,在siteController中,我编写查询并将dataProvider的数组传递给index.php以表的形式显示contain。在index.php中,我想显示member name,而不是memberID。为此,我编写了内部查询,并成功地在命令提示符下运行。在这里,我无法打印名字,而不是“成员id” public function actionIndex() { $query = new \yii\db\Query;

siteController
中,我编写查询并将
dataProvider
的数组传递给
index.php
以表的形式显示contain。在
index.php
中,我想显示
member name
,而不是
memberID
。为此,我编写了内部查询,并成功地在命令提示符下运行。在这里,我无法打印
名字,而不是“
成员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'.'&nbsp<b>'.$complaintModel.'</b>&nbsp'.'Complaints',
    'columns' => [
       ['class' => 'yii\grid\SerialColumn'],
           'practiceCode',
            // 'memberID',
            'description',
            'status',
       ],
    ]); ?>
$dataProvider4=新的ActiveDataProvider([
'query'=>$query,
“分页”=>false,
]);
返回$this->render('index'[
'dataProvider4'=>$dataProvider4]);

我已通过数据提供程序传递数据

查询与dataProvider无关,因此不可用

如果您想扩展查询,您应该这样做,并分配给dataprovider中使用的查询,而不仅仅是执行查询。 无论如何,您可以使用匿名函数获取成员的名称并检索值

<?= GridView::widget([
        'dataProvider' => $dataProvider4,
        //'summary'=>'Total'.'&nbsp<b>'.$complaintModel.'</b>&nbsp'.'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',
              ],
         ]); 
?>

既然您使用的是功能强大的框架,那么最好让框架为您完成复杂的工作,而不是尝试编写自己的查询。这就是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将为您整理所有列名,并编写查询。

发布GridView的完整代码实际上我已经通过数据提供程序传递了数据。我没有添加到此dataProvider函数上方……我添加了此网格视图更改,但尚未生效我已使用Member来更新答案以检索用户名。错误:尝试在此行获取非ObjectName的属性得到错误:return Member::find()->where(['id'=>$model->memberID])->one()->firtsName;我已经更新了答案。。。错误的值而不是“值”