Почему не отображаются данные из связанной таблицы?

Вроде бы сделал все правильно, но gridView пишет not set. Хотя в бд есть данный пользователь.
5c72aa3a34992559446582.png Вот таблица сама с выводом ключа.
Моя реализация
В модели news
public function rules()
    {
        return [
            ...
            [['status', 'user_id'], 'integer'],
           ...
            [['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['user_id' => 'id']],
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }

В NewsSearch
public function search($params)
    {
        $query = News::find()->with('user');
        ...
    }

и gridView
<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ...
            [
                'attribute' => 'user_id',
                'label' => 'Автор',
                'value' => 'user.username'
            ],
            ...
        ],
    ]); ?>

Ни email ничего нельзя вывести
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
видимо не для всех user_id есть соответствующий юзер или что более вероятно где-то user_id = null.
Так что я бы сделал геттер в news и проверял там есть пользователь или нет, а потом уже пытался дернуть его username
например:
public function getUserName()
    {
        return $this->user ? $this->user->username : 'не задан';
    }

ну и в gridView соответственно вместо 'value' => 'user.username' будет 'value' => 'userName' или проще даже просто
'userName', а label в модели с другими указать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы