2016-01-31 4 views
2

Привет, у меня есть 2 таблицы и модели для них. Первый из них являетсяполучить значения из таблицы с внешним ключом

User

и второй

News

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

enter image description here

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

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, тогда оно работает. Я знаю, что это неправильный код в моей первой строке моей функции. Я знаю, что это легко, но я новичок, и я сражался с кодом около часа. Может кто-нибудь мне помочь?

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

<?=$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);?> 
+0

У меня есть ошибка: попытка получить свойство не объекта во второй строке вашего кода ($ q) У меня такая же ошибка в моем коде – Informer

+0

i editet my forst post посмотрите на последний код, который я использую на мой взгляд, может быть, это неправильно? – Informer

+0

Я вижу, что у вас есть где (['urUser_Id' = 'Id']), это не дает никакого результата для поиска модели, в которой вам нужно такое значение, как $ Id .. У меня есть ответ на вопрос. – scaisEdge

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

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

class News extends ActiveRecord 
{ 
    // ... 

    public function getUser() 
    { 
     return $this->hasOne(User::className(), ['id' => 'user_id']); 
    } 
} 
+0

Попытка получить свойство не объекта – Informer

+0

, и это в модели Новости, и у меня есть отношение это Отношение: 'public function getUrUser() { return $ this-> hasOne (UrUser :: className(), ['Id' => 'urUser_Id']); } ' – Informer

+0

@Informer try' $ q-> urUser-> name'. –

 Смежные вопросы

  • Нет связанных вопросов^_^