2015-03-26 3 views
1

Я использую yii2 и у меня есть две таблицы с ключом:Yii2- данные из двух моделей в одном GridView

Первое:

machine 

machine_serial PK,name 

Второе: Os

id PK,os_name, machine_serial PFK 

В отношение 1: N

Я создаю модель с CRU D для машины и OS , и я хочу, чтобы получить данные из двух моделей в одном представлении с GridView, где я использую первичные данные ключа

Мой 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']); 
       }, 
      ] 
     ], 
    ], 
]); 

, но я получаю сообщение об ошибке :

Getting unknown property: backend\models\Node::machine

Я начинающий так пожалуйста, помогите :)

модель ОС:

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']); 
    } 
} 

контроллер зева:

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

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

     ]); 
    } 
+0

Вы можете показать свой код модели? – Chinmay

+0

И покажите код '$ dataProvider'. –

+0

ok, я обновляю свой запрос – Paulis

ответ

0

В вашем GridView вы объявили 'machine.name'. Но машина не является атрибутом вашего объекта модели узла. А в классе Узел у вас есть метод getMachineSerial().

Я думаю, что имя метода неверно. Я думаю, это должно быть getMachine(). Если вы переименуете его, я бы предположил, что будет работать 'machine.name'.

Или вы можете заменить 'machine.name' на 'machineSerial.name' в разделе столбцов GridView.

Смежные вопросы