получить значения из таблицы с внешним ключом

Привет у меня есть 2 стола и модели для них. Первый из них

Пользователь

и второй

Новости

Я хочу взять идентификатор пользователя из таблицы News и нарисовать ее имя и фамилию. Есть принтскрин таблицы News:

введите здесь описание изображения

Я пытаюсь использовать функцию:

public function getUrUser()
{
    $q= News::find()->where(['urUser_Id' =>'Id'])->one();
    $RoyalUserData=User::findOne($q);
    //$RoyalUserData= User::find()->where(['Id' => $q])->one();
    return $RoyalUserData->Name;
}

Но это не работает. Только когда прописываю на q значение 3 для egzample тогда все работает. Я знаю, что это неправильный код в моей первой строке моей функции, вероятно. Я знаю, что это легко, но я новичок, и я боролся с кодом около 1 часа. Может кто-нибудь помочь мне?

На мой взгляд, я использую это:

<?=$model->getUrUser();?>

И я использую это в ListView.

Мой контроллер:

public function actionIndex()
    {
        $model = new NewsForm();
        $searchModel = new NewsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider->setSort(['defaultOrder' => ['Id'=>SORT_DESC]]);

        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $model->saveNews();
            return $this->redirect(['/content/news']);
        } else {
            return $this->render('index', [
                        'model' => $model,
                        'searchModel' => $searchModel,
                        'dataProvider' => $dataProvider,
            ]);
        }
    }

Мой индекс, где я использую _item:

echo ListView::widget( [
    'dataProvider' => $dataProvider,
    'itemView' => '_item',
],  $options = ['class' => 'sorter'] ); ?>

И содержимое _item

<?php
use yii\helpers\Html;
?>  


Treść Newsa:
<?=$model->Text;?> <br>
Autor:
<?=Yii::$app->user->identity->Name?> 
<?=Yii::$app->user->identity->Surname?> <br>
Status Newsa:
<?=$model->cnNewsContentType_Id;?> <br>

  <?= Html::a('Update', ['update', 'id' => $model->Id], ['class' => 'btn btn-primary']) ?>
        <?= Html::a('Delete', ['delete', 'id' => $model->Id], [
            'class' => 'btn btn-danger',
            'data' => [
                'confirm' => 'Are you sure you want to delete this item?',
                'method' => 'post',
            ],
        ]) ?><br><br><br>

person Informer    schedule 31.01.2016    source источник


Ответы (2)


News::find()->where(['urUser_Id' =>'Id'])->one() возвращает модель, а не поле

тогда вы должны получить поле id по модели таким образом

public function getUrUser($id)
{
    // you already have the news model so don't need retrieve it 
    //  it's enough pass the urUser_Id by $id

    $RoyalUserData=User::findOne($id);

    return $RoyalUserData->Name;
}

Затем, если вы хотите показать имя ($ RoyalUserData) в _item

<?=$model->getUrUser($model->urUser_Id);?>
person scaisEdge    schedule 31.01.2016
comment
у меня ошибка: Попытка получить свойство не-объекта во второй строке вашего кода ($ q) у меня такая же ошибка в моем коде - person Informer; 31.01.2016
comment
я редактирую свой первый пост, посмотрите последний код, который я использую, на мой взгляд, может быть, это неправильно? - person Informer; 31.01.2016
comment
Теперь я вижу, что у вас есть where(['urUser_Id' = 'Id']) это не дает никакого результата для поиска модели, вам нужно значение, такое как $ Id .. я обновил ответ .. - person scaisEdge; 31.01.2016
comment
все еще пытается получить свойство не-объекта - person Informer; 01.02.2016
comment
@informer показывает код контроллера действия, связанного с представлением, где вы хотите имя.. - person scaisEdge; 01.02.2016
comment
@Informer в вашем actionIndex, если вы визуализируете индексное представление, вы передаете пустую модель .. если вы перенаправляете на контент/новости, вы не передаете идентификатор для новостей .. ... где вы хотите показать имя? index Просмотр или контент/новости? - person scaisEdge; 01.02.2016
comment
и я могу показать там текст и цену, поэтому я не знаю, почему это не работает - person Informer; 01.02.2016
comment
Показать связанные представления: _item и представление, в котором вы вызываете _item - person scaisEdge; 01.02.2016
comment
эти элементы много из базы данных, и в будущем их будет больше, поэтому я хочу отобразить все эти элементы - person Informer; 01.02.2016
comment
И в контроллере я использую новую модель расширения NewsForm, а в элементе, вероятно, используются новые активные записи расширения новостей. - person Informer; 01.02.2016
comment
Если я правильно понимаю, что в вашей модели у вас уже есть usUser_Id, вы можете использовать его для получения имени RoyalUserData ... я обновил ответ. - person scaisEdge; 01.02.2016
comment
теперь у меня ошибка в элементе: объект класса yii\db\ActiveQuery не может быть преобразован в строку - person Informer; 01.02.2016
comment
Где именно .. обновите вопрос и покажите код Actul _item .. и покажите мне точную ошибку. .. - person scaisEdge; 01.02.2016
comment
теперь у меня ошибка в элементе: объект класса yii\db\ActiveQuery не может быть преобразован в строку, где я пытаюсь отобразить: ‹?=$model-›getUrUser($model-›urUser_Id);?› - person Informer; 01.02.2016

public function getUrUser()
{
    $q = News::find()->where(['urUser_Id' =>'Id'])->one();
    return $q->user->name;
}

В пользовательской модели вы должны создать связь :

class News extends ActiveRecord
{
    // ...

    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }
}
person Onedev_Link    schedule 31.01.2016
comment
Попытка получить свойство не-объекта - person Informer; 31.01.2016
comment
и это в модельных новостях, и у меня есть отношение к этому отношению: public function getUrUser() { return $this->hasOne(UrUser::className(), ['Id' => 'urUser_Id']); } - person Informer; 31.01.2016
comment
@Информер попробуй $q->urUser->name. - person Onedev_Link; 01.02.2016