Как связать таблицы в widget yii2?

Есть виджет левого меню в yii2 который сделан следующим образом:

components/LeftbarWidget.php
<?php

namespace app\components;
use yii\base\Widget;
use Yii;

class LeftbarWidget extends Widget {

    public function run() {
        $id = Yii::$app->request->get('id');
        $users = \dektrium\user\models\User::findOne($id);
        return $this->render('leftbar_tpl', compact('users'));
// Здесь я получаю и передаю в html структуру виджета данные о пользователе
    }
}


В leftbar_tpl.php я хочу не только передавать данные из таблицы user, а так же сделать связь между таблицами например user и setting (в setting по ключу user_id у меня лежат данные о настройках пользователя)

Как мне все это реализовать? Я не совсем понимаю как не в модели, а именно в виджете связать 2 и более таблиц.
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 2
@av_kotosin Автор вопроса
Сделал следующим образом:

В виджете в run() написал подобное:
$contacts = Contact::find()->asArray()->where(['=', 'user_id', $users->id])->all();


В виджете прогнал через foreach и вывел данные.

В самой же модели Contact установил связь. всем спасибо)
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Виджет не должен делать запросы в БД. Он должен строить html на базе переданных в него данных. Так что у Вас в виджет должны приходить уже готовые данные.
Это:
$users = \dektrium\user\models\User::findOne(Yii::$app->request->get('id'));

должно быть в контролере, а если нужно везде, то можно вынести например в конфиг:
'on beforeAction' => function($event){
Yii::$app->params['user'] = \dektrium\user\models\User::findOne(Yii::$app->request->get('id'));
}

и там где вызываете виджет, передать в него Yii::$app->params['user']
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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