Yii2-来自一个GridView中两个模型的数据

时间:2015-03-26 12:14:28

标签: gridview view model yii2

我使用yii2,我有两个带密钥的表:

第一:

machine

machine_serial PK,name

第二: 的 OS

id PK,os_name, machine_serial PFK

关系1:N

我使用CRUD为机器和操作系统生成模型 我想在一个视图中使用GridView从两个模型中获取数据,我一直在使用主键数据

我的网格视图:

GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel'  => $searchModel,
    'columns'      => [
        'os_name',
        'machine_serial',
        'machine.name',
        [
            'class'          => 'yii\grid\ActionColumn',
            'contentOptions' => ['style' => 'width:50px;'],
            'header'         => 'Actions',
            'template'       => '{view}',
            'buttons'        => [
                //view button
                'view' => function ($url, $dataProvider) {
                    return Html::a('view',
                        ['view', 'id' => $dataProvider->id, 
                        'machine_serial' => $dataProvider->machine_serial],
                        ['class' => 'btn btn-primary']);
                },
            ]
        ],
    ],
]);

但我收到错误:

  

获取未知属性:backend \ models \ Node :: machine

我是初学者所以请帮忙:)。

模型os:

namespace backend\models;
use Yii;

class Node extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'os';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['id'], 'integer'],
            [['machine_serial'], 'string', 'max' => 8]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'machine_serial' => 'Machine Serial',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getMachineSerial()
    {
        return $this->hasOne(Machine::className(), ['machine_serial' => 'machine_serial']);
    }

}

模型机:

namespace backend\models;

use Yii;
use yii\db\Query;

class Machine extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'machine';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['machine_serial'], 'required'],
            [['name'], 'string', 'max' => 30]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'machine_serial' => 'Machine Serial',
            'name' => 'Name',
           ];
    }
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getOs()
    {
        return $this->hasMany(Os::className(), ['machine_serial' => 'machine_serial']);
    }  
}
os控制器中的

 public function actionIndex()
    {
        $searchModel = new NodeSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,

        ]);
    }

1 个答案:

答案 0 :(得分:0)

在GridView中,您已声明'machine.name'。但是机器不是节点模型对象的属性。在类Node中,您有方法getMachineSerial()

我认为方法名称是错误的。我想它应该是getMachine()。如果你重命名它,我会认为'machine.name'会起作用。

或者您可以在GridView的columns部分中将'machine.name'替换为'machineSerial.name'