Ошибка Yii2 Gridview - PullRequest
       57

Ошибка Yii2 Gridview

0 голосов
/ 03 июля 2018

Я хочу отобразить столбец из другой таблицы в виде сетки.

В моем контроллере 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 голосов
/ 03 июля 2018

Сначала я думаю, что ваша функция должна быть такой:

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;

но вы его нигде не используете.

0 голосов
/ 03 июля 2018

Вы неправильно определяете свои отношения:

  1. Имя метода должно начинаться с префикса get, например getFileName().
  2. Второй аргумент hasMany() должен быть массивом с картой имен столбцов. Здесь не следует использовать динамические значения или атрибуты модели.
  3. Вы не должны использовать данные Yii::$app->user->identity->id или POST / GET в вашей модели. Это нарушает шаблон MVC и создаст проблемы, если вы попытаетесь использовать это отношение в консоли, например.

public function getFileName() {
    return $this->hasMany(Filename::className(), ['submitted_by' => 'user_id']);
}
0 голосов
/ 03 июля 2018

Использование hasMany () как

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