Yii2 Gridview错误

时间:2018-07-03 03:27:07

标签: php yii2 yii2-advanced-app yii2-basic-app yii2-model

我想在gridview中显示另一个表中的列。

在我的控制器中的actionIndex:

public function actionIndex()
{     
    $user_id = \Yii::$app->user->identity->id;
    $queryFile = PowerGen::find();
    $queryFile ->select(['submitted_by','filename.file_name','filename.submitted_by'])
        ->joinWith('filename')//Tells Yii to use the complains relation that we define below. By default it is an inner join
        ->where(['filename.submitted_by' => $this->user_id]);

    $dataProvider= new ActiveDataProvider([
        'query' => $query,
        'pagination' => false,
    ]);

    return $this->render('index', ['dataProvider4'=>$dataProvider]);
}

在我的模型中:

public function fileName()
{
    $user_id = \Yii::$app->user->identity->id;
    return $this->hasMany(Filename::className(), 'submitted_by' => $this->user_id);
}

错误是:

Error
PHP Parse Error – yii\base\ErrorException
syntax error, unexpected '=>' (T_DOUBLE_ARROW)

该行中的错误是什么。

谢谢

3 个答案:

答案 0 :(得分:1)

像使用hasMany()

public function fileName()
{
    $user_id = \Yii::$app->user->identity->id;
    return $this->hasMany(Filename::className(), ['submitted_by' => $this->user_id]);
}

答案 1 :(得分:1)

首先,我认为您的功能必须是这样的:

public function fileName()
{
    return $this->hasMany(Filename::className(), ['submitted_by' => 'user_id']);
}

您的查询如下:

$user_id = \Yii::$app->user->identity->id;
$queryFile = PowerGen::find();
$queryFile ->select(['submitted_by','filename.file_name','filename.submitted_by'])
                ->joinWith('filename')
                ->where(['filename.submitted_by' => $user_id]);

您要声明变量$user_id

  

$ user_id = \ Yii :: $ app-> user-> identity-> id;

但是您没有在任何地方使用它。

答案 2 :(得分:0)

您以错误的方式定义了您的关系:

  1. 方法名称应以#include <algorithm>为前缀,例如get
  2. getFileName()的第二个参数应为带有列名映射的数组。您不应在此处使用动态值或模型属性。
  3. 您不应在模型中使用hasMany()或POST / GET数据。例如,如果您尝试在控制台中使用此关系,它将破坏MVC模式并会产生问题。

Yii::$app->user->identity->id