GridView и связанные таблицы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
domowdenis
Сообщения: 35
Зарегистрирован: 2018.12.24, 17:29

GridView и связанные таблицы

Сообщение domowdenis »

Пытаюсь вывести значение в GridView из связаной таблицы.
Пример простой - есть таблица продуктов и есть таблица категорий. в таблице продуктов есть ссылка на id категории.

Product

Код: Выделить всё

<?php

namespace common\models\product;

use Yii;
use yii\db\ActiveRecord;
use common\models\category\Category;


class Product extends ActiveRecord
{

    public static function tableName()
    {
        return 'product';
    }

    public function rules()
    {
        return [
            [['base_id'], 'integer'],
            [['category'], 'safe'],
            [['cloth', 'title', 'description', 'photo_1', 'photo_2', 'photo_3', 'photo_4'], 'string', 'max' => 255],
            //[['category'], 'exist', 'skipOnError' => true, 'targetClass' => Category::className(), 'targetAttribute' => ['category' => 'id']],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'Базовое ID'),
            'base_id' => Yii::t('app', 'Экспортное ID'),
            'category' => Yii::t('app', 'Категория'),
            'cloth' => Yii::t('app', 'Категория ткани'),
            'title' => Yii::t('app', 'Наименование продукта'),
            'description' => Yii::t('app', 'Описание продукта'),
            'photo_1' => Yii::t('app', 'Photo 1'),
            'photo_2' => Yii::t('app', 'Photo 2'),
            'photo_3' => Yii::t('app', 'Photo 3'),
            'photo_4' => Yii::t('app', 'Photo 4'),
        ];
    }

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

Код: Выделить всё

<?php

namespace common\models\product;

use yii\base\Model;
use yii\data\ActiveDataProvider;
use common\models\product\Product;

class ProductSearch extends Product
{

    public $categoryName;

    public function rules()
    {
        return [
            [['id', 'base_id', 'category'], 'integer'],
            [['cloth', 'title', 'description', 'photo_1', 'photo_2', 'photo_3', 'photo_4'], 'safe'],
            [['categoryName'], 'safe'],
        ];
    }

    /*
    public function scenarios()
    {
        return Model::scenarios();
    }
    */

    public function search($params)
    {
        $query = Product::find();
        $query->joinWith(['category']);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        $dataProvider->sort->attributes['categoryName'] = [
            'asc' => ['category.name' => SORT_ASC],
            'desc' => ['category.name' => SORT_DESC],
        ];

        $this->load($params);

        if (!$this->validate()) {
            // uncomment the following line if you do not want to return any records when validation fails
            //$query->where('0=1');
            return $dataProvider;
        }

        return $dataProvider;
    }
}
index.php

Код: Выделить всё

<?php

use yii\helpers\Html;
use yii\grid\GridView;
use common\models\category\Category;

$this->title = Yii::t('app', 'Продукты');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="product-index">

    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        <?= Html::a(Yii::t('app', 'Создать продукт'), ['create'], ['class' => 'btn btn-success']) ?>
    </p>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            [
                'attribute' => 'id',
                'format'    => 'text',
                'label'     => Yii::t('app', 'Базовое ID'),
            ],
            [
                'attribute' => 'base_id',
                'format'    => 'text',
                'label'     => Yii::t('app', 'Экспортное ID'),
            ],
            [
                'attribute' => 'category',
                'format'    => 'text',
                'label'     => Yii::t('app', 'Категория'),
            ],
            [
                'attribute' => 'cloth',
                'format'    => 'text',
                'label'     => Yii::t('app', 'Категория ткани'),
            ],
            [
                'attribute' => 'title',
                'format'    => 'text',
                'label'     => Yii::t('app', 'Наименование продукта'),
            ],
            [
                'attribute' => 'description',
                'format'    => 'text',
                'label'     => Yii::t('app', 'Описание продукта'),
            ],
            [
                'attribute' => 'categoryName',
                'label' => 'Категория',
                'value' => 'category.name',
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
</div>
Получаю вот такую вот красоту - http://prntscr.com/mkms9v

Что не так?
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: GridView и связанные таблицы

Сообщение proctoleha »

Вот есть гугл. Вот я ввожу запрос GridView и связанные таблицы. Точно так же, как ваша тема.
Гугл мне говорит: https://www.google.com/search?q=GridVie ... e&ie=UTF-8
На первой странице выдачи нахожу результат: https://p0vidl0.info/yii2-sortirovka-i- ... olyam.html
Разжевано всё.
Вы точно уверены, что необходимо копипастить всю статью сюда?
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
domowdenis
Сообщения: 35
Зарегистрирован: 2018.12.24, 17:29

Re: GridView и связанные таблицы

Сообщение domowdenis »

эм.. не совсем понял суть претензии.
Я вроде как не претендовал на авторство кода))).Я прошу помощи в нахождении ошибки. Чтобы было проще - показал весь код.

Т.е. следуя вашей логики - я должен был написать - мол - делаю как по этой ссылке - не работает?
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: GridView и связанные таблицы

Сообщение proctoleha »

Нет никакой претензии. Просто эта тема всплывает не в первый раз, и не даже не второй. Потренируйтесь, как описано в статье. И не будет никаких вопросов. Все очень подробно и доходчиво.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
domowdenis
Сообщения: 35
Зарегистрирован: 2018.12.24, 17:29

Re: GridView и связанные таблицы

Сообщение domowdenis »

не вижу разницы в коде, если честно.
Ок. Сделаю на примере.Скорее всего - не вижу чего-то
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: GridView и связанные таблицы

Сообщение dmg »

В моделе product есть атрибут category и связь category.
domowdenis
Сообщения: 35
Зарегистрирован: 2018.12.24, 17:29

Re: GridView и связанные таблицы

Сообщение domowdenis »

dmg писал(а): 2019.02.14, 00:06 В моделе product есть атрибут category и связь category.
Спс, добрый человек. Глупейшая ошибка - но не видел
Закрыто