2016-08-25 6 views
1

Я очень новичок в yii2. У меня есть 3 задачи таблиц, действия и сотрудники. Всякий раз, когда я добавляю несколько строк данные в таблице деятельности я получаю следующее сообщение об ошибке -Всякий раз, когда я добавляю несколько таблиц в таблицу, я получаю сообщение об ошибке «Получение неизвестного свойства»

"Getting неизвестного свойства: бэкенд \ модели \ Employee :: eMPLOYEE_ID"

Моя модели Activty имеет эти два получить отношение функции:

public function getTask() 
{ 
    return $this->hasOne(Tasks::className(), ['Task_ID' => 'Task_ID']); 
} 

public function getEmployee() 
{ 
    return $this->hasOne(Employee::className(), ['Employee_ID' => 'Employee_ID']); 
} 

В моем _columns.php я использую следующее, чтобы получить имя сотрудника в gridview. Но даже когда я прокомментирую это, я получаю ошибку, если в таблице Activity есть несколько строк.

[ 
    'attribute' => 'Employee_ID', 
    'value' => 'employee.employee_name', 
], 

Может кто-то, пожалуйста, помогите мне понять, почему это происходит и как я могу это исправить?

Спасибо

EDIT:

Добавлен контроллер

`

class ActivitiesController extends Controller 
{ 
    /** 
    * @inheritdoc 
    */ 
    public function behaviors() 
    { 
     return [ 
       'access'=>[ 
       'class'=>AccessControl::classname(), 
       'only'=>['create','update'], 
       'rules'=>[ 
       [ 
         'allow'=>true, 
         'roles'=>['@'] 
         ], 
         ] 
        ], 

      'verbs' => [ 
       'class' => VerbFilter::className(), 
       'actions' => [ 
        'delete' => ['post'], 
        'bulk-delete' => ['post'], 
       ], 
      ], 
     ]; 
    } 

    /** 
    * Lists all Activity models. 
    * @return mixed 
    */ 
    public function actionIndex() 
    {  
     $searchModel = new ActivitiesSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('index', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
    } 


    /** 
    * Displays a single Activity model. 
    * @param integer $id 
    * @return mixed 
    */ 
    public function actionView($id) 
    { 
     $request = Yii::$app->request; 
     if($request->isAjax){ 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      return [ 
        'title'=> "Activity #".$id, 
        'content'=>$this->renderAjax('view', [ 
         'model' => $this->findModel($id), 
        ]), 
        'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). 
          Html::a('Edit',['update','id'=>$id],['class'=>'btn btn-primary','role'=>'modal-remote']) 
       ];  
     }else{ 
      return $this->render('view', [ 
       'model' => $this->findModel($id), 
      ]); 
     } 
    } 

    /** 
    * Creates a new Activity model. 
    * For ajax request will return json object 
    * and for non-ajax request if creation is successful, the browser will be redirected to the 'view' page. 
    * @return mixed 
    */ 
    public function actionCreate() 
    { 
     $request = Yii::$app->request; 
     $model = new Activity(); 

     if($request->isAjax){ 
      /* 
      * Process for ajax request 
      */ 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      if($request->isGet){ 
       return [ 
        'title'=> "Create new Activity", 
        'content'=>$this->renderAjax('create', [ 
         'model' => $model, 
        ]), 
        'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). 
           Html::button('Save',['class'=>'btn btn-primary','type'=>"submit"]) 

       ];   
      }else if($model->load($request->post()) && $model->save()){ 
       return [ 
        'forceReload'=>'#crud-datatable-pjax', 
        'title'=> "Create new Activity", 
        'content'=>'<span class="text-success">Create Activity success</span>', 
        'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). 
          Html::a('Create More',['create'],['class'=>'btn btn-primary','role'=>'modal-remote']) 

       ];   
      }else{   
       return [ 
        'title'=> "Create new Activity", 
        'content'=>$this->renderAjax('create', [ 
         'model' => $model, 
        ]), 
        'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). 
           Html::button('Save',['class'=>'btn btn-primary','type'=>"submit"]) 

       ];   
      } 
     }else{ 
      /* 
      * Process for non-ajax request 
      */ 
      if ($model->load($request->post()) && $model->save()) { 
       return $this->redirect(['view', 'id' => $model->Activity_ID]); 
      } else { 
       return $this->render('create', [ 
        'model' => $model, 
       ]); 
      } 
     } 

    } 

    /** 
    * Updates an existing Activity model. 
    * For ajax request will return json object 
    * and for non-ajax request if update is successful, the browser will be redirected to the 'view' page. 
    * @param integer $id 
    * @return mixed 
    */ 
    public function actionUpdate($id) 
    { 
     $request = Yii::$app->request; 
     $model = $this->findModel($id);  

     if($request->isAjax){ 
      /* 
      * Process for ajax request 
      */ 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      if($request->isGet){ 
       return [ 
        'title'=> "Update Activity #".$id, 
        'content'=>$this->renderAjax('update', [ 
         'model' => $model, 
        ]), 
        'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). 
           Html::button('Save',['class'=>'btn btn-primary','type'=>"submit"]) 
       ];   
      }else if($model->load($request->post()) && $model->save()){ 
       return [ 
        'forceReload'=>'#crud-datatable-pjax', 
        'title'=> "Activity #".$id, 
        'content'=>$this->renderAjax('view', [ 
         'model' => $model, 
        ]), 
        'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). 
          Html::a('Edit',['update','id'=>$id],['class'=>'btn btn-primary','role'=>'modal-remote']) 
       ];  
      }else{ 
       return [ 
        'title'=> "Update Activity #".$id, 
        'content'=>$this->renderAjax('update', [ 
         'model' => $model, 
        ]), 
        'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). 
           Html::button('Save',['class'=>'btn btn-primary','type'=>"submit"]) 
       ];   
      } 
     }else{ 
      /* 
      * Process for non-ajax request 
      */ 
      if ($model->load($request->post()) && $model->save()) { 
       return $this->redirect(['view', 'id' => $model->Activity_ID]); 
      } else { 
       return $this->render('update', [ 
        'model' => $model, 
       ]); 
      } 
     } 
    } 

    /** 
    * Delete an existing Activity model. 
    * For ajax request will return json object 
    * and for non-ajax request if deletion is successful, the browser will be redirected to the 'index' page. 
    * @param integer $id 
    * @return mixed 
    */ 
    public function actionDelete($id) 
    { 
     $request = Yii::$app->request; 
     $this->findModel($id)->delete(); 

     if($request->isAjax){ 
      /* 
      * Process for ajax request 
      */ 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      return ['forceClose'=>true,'forceReload'=>'#crud-datatable-pjax']; 
     }else{ 
      /* 
      * Process for non-ajax request 
      */ 
      return $this->redirect(['index']); 
     } 


    } 

    /** 
    * Delete multiple existing Activity model. 
    * For ajax request will return json object 
    * and for non-ajax request if deletion is successful, the browser will be redirected to the 'index' page. 
    * @param integer $id 
    * @return mixed 
    */ 
    public function actionBulkDelete() 
    {   
     $request = Yii::$app->request; 
     $pks = explode(',', $request->post('pks')); // Array or selected records primary keys 
     foreach ($pks as $pk) { 
      $model = $this->findModel($pk); 
      $model->delete(); 
     } 

     if($request->isAjax){ 
      /* 
      * Process for ajax request 
      */ 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      return ['forceClose'=>true,'forceReload'=>'#crud-datatable-pjax']; 
     }else{ 
      /* 
      * Process for non-ajax request 
      */ 
      return $this->redirect(['index']); 
     } 

    } 

    /** 
    * Finds the Activity model based on its primary key value. 
    * If the model is not found, a 404 HTTP exception will be thrown. 
    * @param integer $id 
    * @return Activity the loaded model 
    * @throws NotFoundHttpException if the model cannot be found 
    */ 
    protected function findModel($id) 
    { 
     if (($model = Activity::findOne($id)) !== null) { 
      return $model; 
     } else { 
      throw new NotFoundHttpException('The requested page does not exist.'); 
     } 
    } 
} 

`

index.php ниже

`

<div class="activity-index"> 
    <div id="ajaxCrudDatatable"> 
     <?=GridView::widget([ 
      'id'=>'crud-datatable', 
      'dataProvider' => $dataProvider, 
      'filterModel' => $searchModel, 
      'pjax'=>true, 
      'columns' => require(__DIR__.'/_columns.php'), 
      'toolbar'=> [ 
       ['content'=> 
        Html::a('<i class="glyphicon glyphicon-plus"></i>', ['create'], 
        ['role'=>'modal-remote','title'=> 'Create new Activities','class'=>'btn btn-default']). 
        Html::a('<i class="glyphicon glyphicon-repeat"></i>', [''], 
        ['data-pjax'=>1, 'class'=>'btn btn-default', 'title'=>'Reset Grid']). 
        '{toggleData}'. 
        '{export}' 
       ], 
      ],   
      'striped' => true, 
      'condensed' => true, 
      'responsive' => true,   
      'panel' => [ 
       'type' => 'primary', 
       'heading' => '<i class="glyphicon glyphicon-list"></i> Activities listing', 
       'before'=>'<em>* Resize table columns just like a spreadsheet by dragging the column edges.</em>', 
       'after'=>BulkButtonWidget::widget([ 
          'buttons'=>Html::a('<i class="glyphicon glyphicon-trash"></i>&nbsp; Delete All', 
           ["bulk-delete"] , 
           [ 
            "class"=>"btn btn-danger btn-xs", 
            'role'=>'modal-remote-bulk', 
            'data-confirm'=>false, 'data-method'=>false,// for overide yii data api 
            'data-request-method'=>'post', 
            'data-confirm-title'=>'Are you sure?', 
            'data-confirm-message'=>'Are you sure want to delete this item' 
           ]), 
         ]).       
         '<div class="clearfix"></div>', 
      ] 
     ])?> 
    </div> 
</div> 
<?php Modal::begin([ 
    "id"=>"ajaxCrudModal", 
    "footer"=>"",// always need it for jquery plugin 
])?> 
<?php Modal::end(); ?> 

`

view.php ниже

` 

<div class="activity-view"> 

    <?= DetailView::widget([ 
     'model' => $model, 
     'attributes' => [ 
      'Activity_ID', 
      'Activity_name', 
      'Activity_description', 
      'Due_Date', 
      'Status', 
      'Task_ID', 
      // 'Employee_ID', 
     ], 
    ]) ?> 

</div> 

`

В таблице ниже схемы

ActivityTbl

Field    Type  Null  Key  Default  Extra 
Activity_ID   int(11)  NO  PRI  NULL auto_increment 
Activity_name  varchar(100) NO  NULL  
Activity_description varchar(255) NO  NULL  
Due_Date   date  NO  NULL  
Status enum('Open','Completed','Closed') NO  NULL  
Task_ID   int(11)  NO  NULL  
Employee_ID  int(11)  NO  NULL  

таблица Сотрудник

Field Type Null Key  Default  Extra 
employee_ID  int(11)  NO PRI  NULL auto_increment 
employee_name varchar(150) NO  NULL  
+1

Пожалуйста, обновите свой вопрос с помощью табличных схем Employee и Activty – SilverFire

+1

показать контроллер/действие, модель и просмотреть соответствующий код, пожалуйста – scaisEdge

+0

Я добавил модель, схему просмотра и схемы таблицы действий как просили. – user2211486

ответ

2

В Activity таблице вы имеете Employee_ID, тем временем в Employee таблице соответствующее поле называется employee_ID. Обратите внимание на случай с первой буквой;)

+0

О, хорошо. Спасибо! Поэтому, чтобы исправить проблему, я могу просто внести изменения в таблицу и снова создать модель для сотрудника? Или мне нужно внести какие-либо изменения в код? – user2211486

+0

Да, этого будет достаточно. Попробуйте переименовать столбец и сначала проверьте приложение. Если приложение не работает - попробуйте перегенерировать модель – SilverFire

+0

Хорошо, спасибо SilverFire!Я сделаю так, как сказал, и выберите ответ :) – user2211486

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

  • Нет связанных вопросов^_^