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

Привет у меня есть 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>

2

Решение

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

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

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);?>
2

Другие решения

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']);
}
}
0

По вопросам рекламы [email protected]