Yii 2.0 - 试图获得非对象的属性

时间:2017-07-16 14:59:15

标签: database yii2 relation yii2-model

我尝试将“ID Kategori”(类别ID)更改为“Nama Kategori”(类别名称),类别ID在产品表中,并且与类别表有关系。

使用kartik-v gridView

进行gridView

我知道错误发生在return Html::a($model->kategori->deskripsi ,['kategori/view','id' => $model->Id]);,但我不知道问题是什么或如何修复

请帮助我......>。<

[
        'label' => 'Kategori',
        'attribute' => 'IdKategori',
        'format' => 'raw',
        'vAlign' => 'middle',
        'value' => function ($model, $key, $index) {
        return Html::a($model->kategori->deskripsi ,['kategori/view','id' => $model->Id]);
        },
],

这是模型

<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "produk".
 *
 * @property integer $Id
 * @property integer $IdKategori
 * @property string $nama_produk
 * @property integer $harga_produk
 * @property string $gambar
 * @property string $deksripsi_produk
 * @property string $detail_produk
 */
class Produk extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public $file;
    public static function tableName()
    {
        return 'produk';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['IdKategori', 'nama_produk', 'harga_produk', 'gambar', 'deksripsi_produk', 'detail_produk'], 'required'],
            [['IdKategori', 'harga_produk'], 'integer'],
            [['file'], 'file'],
            [['nama_produk', 'file', 'gambar', 'deksripsi_produk', 'detail_produk'], 'string', 'max' => 255],
            [['IdKategori'], 'exist', 'skipOnError' => true, 'targetClass' => Kategori::className(), 'targetAttribute' => ['IdKategori' => 'Id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'Id' => 'ID',
            'IdKategori' => 'Id Kategori',
            'nama_produk' => 'Nama Produk',
            'harga_produk' => 'Harga Produk',
            'gambar' => 'Gambar',
            'deksripsi_produk' => 'Deksripsi Produk',
            'detail_produk' => 'Detail Produk',
        ];
    }
    public function getKategori()
    {
        return $this->hasOne(Kategori::className(), ['Id' => 'IdKategori']);
    }
}

这是kategori模型

<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "kategori".
 *
 * @property integer $Id
 * @property integer $ParentId
 * @property string $nama_kategori
 * @property string $deskripsi
 */
class Kategori extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'kategori';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['ParentId', 'nama_kategori', 'deskripsi'], 'required'],
            [['ParentId'], 'integer'],
            [['nama_kategori', 'deskripsi'], 'string', 'max' => 255],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'Id' => 'ID',
            'ParentId' => 'Parent ID',
            'nama_kategori' => 'Nama Kategori',
            'deskripsi' => 'Deskripsi',
        ];
    }
}

1 个答案:

答案 0 :(得分:3)

我检查了自己,以确保我可以重复你的错误,似乎就是这种情况。

在您的数据库中,表produkt有一个名为IdKategori的列,至少有一行包含null或表kategori的不存在的值(不存在) value表示它具有kategori表中不存在的ID。

你可以用(一个例子)来解决这个问题:

'value' => function ($model, $key, $index) {
    if (empty($model->kategori->deskripsi)) {
        return '';
    } else {
        return Html::a($model->kategori->deskripsi, ['kategori/view', 'id' => $model->Id]);
    }
},