@dwpoint

Как связать две таблицы в DetailView?

Друзья, подскажите, пожалуйста. У меня есть в БД 2 таблицы. Пусть первая будет это товар, а вторая категории. В таблице с товарами есть id категорий. Если в DetailView выводить его, то понятное дело, это будет просто id, который человеку ни о чём не говорит. Подскажите, пожалуйста, как сделать так, чтобы этот id сверялся с таблицей категорий и выводил имя?

Код вьюшки:
<?php

use core\forms\faq\FaqCategoryItemForm;
use core\forms\faq\FaqItemForm;
use yii\helpers\Html;
use yii\widgets\DetailView;

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

$this->title = $model->name;
$this->params['breadcrumbs'][] = ['label' => 'Ответ-Вопрос', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
\backend\helpers\TemplateHelper::boxWrap($this->params);
?>
<div>
    <p>
        <?= Html::a('Редактирование', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
        <?= Html::a('Удалить', ['delete', 'id' => $model->id], ['class' => 'btn btn-danger']) ?>
    </p>

    <?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'id',
            'name',
            'description',
            [
                'attribute' => 'category_id',
                'format' => 'html',
                'value' => function($model) {
                    return '';
                },
            ],
        ],
    ]) ?>

</div>
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
@dwpoint Автор вопроса
В общем, методом тыка в итоге как-то сделал.

Вот такой код во вьюшке:
<?php

use core\entities\Faq\FaqItem;
use core\forms\faq\FaqItemForm;
use yii\helpers\Html;
use yii\widgets\DetailView;

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

$this->title = $model->name;
$this->params['breadcrumbs'][] = ['label' => 'Ответ-Вопрос', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
\backend\helpers\TemplateHelper::boxWrap($this->params);
?>
<div>
    <p>
        <?= Html::a('Редактирование', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
        <?= Html::a('Удалить', ['delete', 'id' => $model->id], ['class' => 'btn btn-danger']) ?>
    </p>

    <?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'id',
            'name',
            'description',
            [
                'attribute' => 'category_id',
                'format' => 'html',
                'value' => function(FaqItem $model) {
                    return $model->getName();

                },
            ],
        ],
    ]) ?>

</div>


И обязательно в core\entities\Faq\FaqItem написал два метода:

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

    public function getName() {
        return $this->nameCategory->name;
    }


Место во вьюшке, где работал:
[
                'attribute' => 'category_id',
                'format' => 'html',
                'value' => function(FaqItem $model) {
                    return $model->getName();

                },
            ],
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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