@nikitinandrey1990

Как связать 2 таблицы из БД с одной в yii2?

Вопрос решен. Может кому поможет это.

В models\Category добавил
public function getClub()
    {
        return $this->hasMany(Club::className(), ['category_id' => 'id']);
    }


В CategoryController добавил
public function actionView($id)
    {
        $id = Yii::$app->request->get('id');
        $news = News::find()->where(['category_id' => $id])->all();
        $clubs = Club::find()->where(['category_id' => $id])->all();
        return $this->render('view', compact('news', 'clubs'));
    }


category/view: вывод новостей
<div class="content">
        <h2>Новости спорта</h2>
        <?php if(!empty($news)): ?>
            <?php foreach ($news as $new): ?>
                <h1><?= $new->name ?></h1>
                <p><?= $new->content ?></p>
            <?php endforeach; ?>

        <?php else: ?>
            <?php if(!empty($clubs)): ?>
                <?php foreach ($clubs as $club): ?>
                    <h1><?= $club->name ?></h1>
                <?php endforeach; ?>
            <?php endif; ?>
        <?php endif; ?>


Спасибо всем, кто помогал!

--------------------------------------------------------------
--------------------------------------------------------------
Добрый день!
Вопрос такой, нужно связать 2 таблицы "news" и "club" с таблицей "category".

5a29205045626202192076.png

---------------------------------------------------------------

5a29205bc0a8e002911105.png

---------------------------------------------------------------

5a29206368a51834483756.png

Нужно связать по столбцам в "news" и "club" столбец "category_id" должен равняться столбцу "id" в таблице "category".

5a292322d09f8167997194.png

Нужно, чтобы нажимая на РФПЛ, выводились команды из таблицы "club". С новостями все получилось, а вот дальше, что то не могу понять, как сделать подключение к еще одной таблице. Подскажите пожалуйста. В Yii2 новичок, буду благодарен за разжеванный ответ. Документацию пожалуйста не предлагать

Вот все подключения и вывод:

CategoryController:

<?php
/**
 * Created by PhpStorm.
 * User: Computer
 * Date: 06.12.2017
 * Time: 20:34
 */

namespace app\controllers;

use app\models\Category;
use app\models\News;
use app\models\Club;
use Yii;


class CategoryController extends AppController
{
    public function actionIndex()
    {
        $news = News::find()->all();
        return $this->render('index', compact('news'));
    }

    public function actionView($id)
    {
        $id = Yii::$app->request->get('id');
        $news = News::find()->where(['category_id' => $id])->all();
        return $this->render('view', compact('news'));
    }

}


model\Category:

<?php
/**
 * Created by PhpStorm.
 * User: Computer
 * Date: 06.12.2017
 * Time: 12:35
 */

namespace app\models;

use yii\db\ActiveRecord;

class Category extends ActiveRecord
{
    public static function tableName()
    {
        return 'category';
    }

    public function getNews()
    {
        return $this->hasMany(News::className(), ['category_id' => 'id']);
    }

}


model\Club:

<?php
/**
 * Created by PhpStorm.
 * User: Computer
 * Date: 06.12.2017
 * Time: 12:37
 */

namespace app\models;

use yii\db\ActiveRecord;

class club extends ActiveRecord
{
    public static function tableName()
    {
        return 'club';
    }

    public function getCategory()
    {
        return $this->hasOne(Category::className(), ['id' => 'category_id']);
    }
}


model\News:

<?php
/**
 * Created by PhpStorm.
 * User: Computer
 * Date: 06.12.2017
 * Time: 20:26
 */

namespace app\models;


use yii\db\ActiveRecord;

class News extends ActiveRecord
{
    public static function tableName()
    {
        return 'news';
    }

    public function getCategory()
    {
        return $this->hasOne(Category::className(), ['id' => 'category_id']);
    }
}


category/view: вывод новостей

<?php

/* @var $this yii\web\View */
use yii\helpers\Html;

$this->title = 'My Yii Application';
?>

<?php

/* @var $this yii\web\View */

$this->title = 'My Yii Application';
?>

<div class="wrap">
    <div class="leftmenu">
        <ul class="catalog category-products">
            <?= \app\components\MenuWidget::widget(['tpl' => 'menu']); ?>
        </ul>
    </div>

    <div class="content">
        <h2>Новости спорта</h2>
        <?php if(!empty($news)): ?>
            <?php foreach ($news as $new): ?>
                <h1><?= $new->name ?></h1>
                <p><?= $new->content ?></p>
            <?php endforeach; ?>
        <?php else: ?>
            <h2>Новостей нет</h2>
        <?php endif; ?>
    </div>
</div>


формирование левого меню

<li>
    <a href="<?= \yii\helpers\Url::to(['category/view',
        'id' => $category['id']]); ?>">
        <?= $category['name'] ?>
        <?php if(isset($category['childs'])): ?>
            <span class="badge pull-right"><i class="fa fa-plus"></i></span>
        <?php endif; ?>
    </a>
    <?php if(isset($category['childs'])): ?>
        <ul>
            <?= $this->getMenuHtml($category['childs'])?>
        </ul>
    <?php endif; ?>
</li>
  • Вопрос задан
  • 1595 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
У Вас в модели Category есть связь на новости, так добавьте ещё одну связь на клубы.
Связей можно кучу писать в модели, да ещё и через связную модель подтягивать связи этой модели.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov Куратор тега MySQL
Web developer
В Yii2 новичок, буду благодарен за разжеванный ответ.

RTFM www.yiiframework.com/doc-2.0/guide-db-active-recor...
Ответ написан
Maksclub
@Maksclub
maksfedorov.ru
Материал как у Boris Korobkov, но на русском языке:
https://github.com/yiisoft/yii2/blob/master/docs/g...

а именно раздел по работе с связями:
https://github.com/yiisoft/yii2/blob/master/docs/g...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы