@shevchenko__k

Связи между таблиц в Yii2?

Здравствуйте, помогите мне пожалуйста грамотно сделать задание.
У меня есть таблица news в которой есть id отправителя. и мне надо соединить ее с таблицей пользователей.
что бы получилось вот так :
5a8d55bb62d0f824377544.png
Что бы я мог вывести новость и имя кто ее создал.
И мне надо что бы это было в виджете ListWiew.
вот дополнительные мои документ. подскажите мне пожалуйста. Надеюсь я максимально ясно изложил суть проблемы.
Заранее спасибо.
Model
<?php

namespace app\models;

use yii\web\UploadedFile;

use Yii;

/**
 * This is the model class for table "news".
 *
 * @property int $id
 * @property string $text
 * @property string $date_create
 * @property int $status
 * @property int $id_user
 * @property string $doc
 *
 * @property Users $user
 */
class News extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'news';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['text', 'date_create', 'id_user'], 'required'],
            [['text'], 'string'],
            [['date_create'], 'safe'],
            [['status', 'id_user'], 'integer'],
            [['doc'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg'],
            [['id_user'], 'exist', 'skipOnError' => true, 'targetClass' => Users::className(), 'targetAttribute' => ['id_user' => 'id']],
        ];
    }
	
	public function upload()
    {
		die(print_r($this->validate()));
        if ($this->validate()) {
            $this->avatar->saveAs('img/avatars/' . $this->avatar->baseName . '.' . $this->avatar->extension);
            return true;
        } else {
            return false;
        }
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'text' => 'Text',
            'date_create' => 'Date Create',
            'status' => 'Status',
            'id_user' => 'Id User',
            'doc' => 'File',
        ];
    }

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

controller и action
public function actionIndex()
    {
		$model = new News();
        $dataProvider = new ActiveDataProvider([
            'query' => News::find(),
			'sort'=>['defaultOrder'=>['id' => SORT_DESC]],
			'pagination' => [
				'pageSize' => 10,
			],
        ]);
        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'model' => $model,
        ]);
    }

views widget
echo ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_list',
    'summary' => false,
]);

itemView
<div class="news">
	<div class="n_bl">
		<div class="n_bl_1">
			<div class="n_bl_1_1"><a href="/profile"><img src="/web/img/profile.jpg" alt="" class="new_photo"></a></div>
			<div class="n_bl_1_4">	
				<div class="n_bl_1_2"><a href="/profile"></a></div>
				<div class="n_bl_1_3"><?=$model->date_create?></div>
			</div>
		</div>
		<div class="g_g10"><div class="n_bl_1_5" onclick="$('.g_g11').toggleClass('active');"><img src="/web/img/icon/points.svg" alt=""></div>
        <div class="g_g11">
            <ul>
                <li><a href="<?=Url::toRoute(['news/edit','id'=>$model->id])?>">Редактировать</a></li>
                <li><a href="<?=Url::toRoute(['news/delete','id'=>$model->id])?>">Удалить</a></li>
            </ul>
        </div>
        </div>
		
		<div class="n_bl_2">
		<?=Editable::widget(['name'=>'text','inputType'=>'textArea','format' => Editable::FORMAT_BUTTON,'inputType' => Editable::INPUT_TEXTAREA,'asPopover' => true,'value' => $model->text,'header' => '','size'=>'lg']) ?>
		</div>
		<?php if($model->doc): ?>
		<div class="n_bl_3"><img src="/web/img/posd.jpg" width="697" height="156"></div>
		<?php endif; ?>
		<div class="n_bl_4">
			<div class="n_bl_comment">
				<input type="text" placeholder="Напишите комментарий..." class="news_comment">
				<button class="button_news"></button>
			</div>
			<div class="n_bl_like"><div class="like_2"><svg class="like_1" xmlns="http://www.w3.org/2000/svg" viewBox="1248.229 4240.818 19.922 17.41">
  <g id="noun_1232905_cc" transform="translate(1248.229 4240.818)">
    <g id="Group_13" data-name="Group 13" transform="translate(0 0)">
      <path id="Path_6" data-name="Path 6" class="svg-like" d="M19.521,10c-.639,0-2.512,0-4.76,2.887C13.946,11.807,12.293,10,10,10a5.211,5.211,0,0,0-5.2,5.2,5.352,5.352,0,0,0,.375,1.961c.463,1.168,3.041,3.724,6.347,6.942,1.256,1.234,2.358,2.314,2.909,2.931l.331.375.331-.375c.551-.617,1.653-1.675,2.909-2.931,3.306-3.218,5.884-5.8,6.347-6.942a4.934,4.934,0,0,0,.375-1.961A5.211,5.211,0,0,0,19.521,10Zm4.011,6.832c-.441,1.08-3.746,4.3-6.149,6.655-1.058,1.036-2.005,1.961-2.623,2.6-.617-.639-1.565-1.565-2.623-2.6-2.4-2.358-5.708-5.576-6.149-6.655A4.128,4.128,0,0,1,5.682,15.2,4.326,4.326,0,0,1,10,10.882c2.028,0,3.482,1.7,4.408,3l.353.507.353-.507c.926-1.278,2.38-3,4.408-3A4.326,4.326,0,0,1,23.841,15.2,4.055,4.055,0,0,1,23.532,16.832Z" transform="translate(-4.8 -10)"/>
    </g>
  </g>
</svg></div><div class="like_3">123</div></div>
		</div>
	</div>
</div>
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
slo_nik
@slo_nik
Добрый день.
Добавьте в запрос связь для пользователей
'query' => News::find()->with('user')
Модель, я думаю, передавать в представление излишне.
В самом представлении Вы можете получить данные пользователя так
echo $model->user->name; // подставьте вместо name своё имя поля в таблице user
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы