Trying to get property of non-object in action column in yii2 -


i've customized query in framesearch model , build query findbysql. i'm trying customize action column. gridview looks fine except action column. getting error - enter image description here

framesearch model code -

<?php  namespace frontend\modules\framestock\models;  use yii; use yii\base\model; use yii\data\activedataprovider; use frontend\modules\framestock\models\frame; use frontend\modules\framestock\models\poitemframe; use yii\db\query; use yii\db\command; /**  * framesearch represents model behind search form `frontend\modules\framestock\models\frame`.  */ class framesearch extends frame {     public $purchase;     /**      * @inheritdoc      */     public function rules()     {         return [             [['f_id'], 'integer'],             [['f_brand', 'f_name','purchase'], 'safe'],         ];     }      /**      * @inheritdoc      */     public function scenarios()     {         // bypass scenarios() implementation in parent class         return model::scenarios();     }      /**      * creates data provider instance search query applied      *      * @param array $params      *      * @return activedataprovider      */     public function search($params)     {         $subquery1 = (new query())->select(['poi_framename','sum(poi_qty) purchased'])->from ('poitemframe')->join('left join','frame','frame.f_name = poitemframe.poi_framename')->groupby('poi_framename');                 $subquery2 = (new query())->select(['o_frame','count(o_frame) sold'])->from ('orders')->join('left join','frame','frame.f_name = orders.o_frame')->groupby('o_frame');                 $query = (new query())->select(['f_brand','f_name','coalesce(pt.purchased,0)as purchased' , 'coalesce(st.sold,0) sold', '(coalesce(pt.purchased,0) - coalesce(st.sold,0)) stock'])->from ('frame')->leftjoin(['pt' => $subquery1],'pt.poi_framename = frame.f_name')->leftjoin(['st' => $subquery2],'st.o_frame = frame.f_name');           // ->joinwith(['purchase']);         // $items = $query         //         ->select([         //             'f_brand',         //             'f_name',         //             'sum(poitemframe.poi_qty) purchased',         //             ])         //         //->where(['stock.product_id'=>3])         //         ->groupby('f_name')         //         ->all();            // add conditions should apply here          $dataprovider = new activedataprovider([             'query' => $query,         ]);          $this->load($params);          if (!$this->validate()) {             // uncomment following line if not want return records when validation fails             // $query->where('0=1');             return $dataprovider;         }          // grid filtering conditions         $query->andfilterwhere([             'f_id' => $this->f_id,         ]);          $query->andfilterwhere(['like', 'f_brand', $this->f_brand])             ->andfilterwhere(['like', 'f_name', $this->f_name]);          return $dataprovider;     } } 

index.php

<?php  use yii\helpers\html; use yii\grid\gridview; use yii\db\query; use yii\db\command;  /* @var $this yii\web\view */ /* @var $searchmodel frontend\modules\framestock\models\framesearch */ /* @var $dataprovider yii\data\activedataprovider */  $this->title = 'frames'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="frame-index">      <h1><?= html::encode($this->title) ?></h1>     <?php // echo $this->render('_search', ['model' => $searchmodel]); ?>      <?= gridview::widget([         'dataprovider' => $dataprovider,         'filtermodel' => $searchmodel,         'columns' => [             ['class' => 'yii\grid\serialcolumn'],              'f_brand',             'f_name',             'purchased',             'sold',             'stock',              [             'class' => 'yii\grid\actioncolumn',             'template' => '{ledger}',             'buttons' => [                 'ledger' => function ($url, $model) {                     return html::a(                         '<span class="glyphicon glyphicon-eye-open"></span>',                         ['/frame/ledger', 'f_name' => $model->f_name],                          [                             'title' => 'ledger',                             'data-pjax' => '0',                         ]                     );                 },             ],             ],         ],     ]); ?> </div> 

update

enter image description here

after adding exit; enter image description here

please tell me how resolve this. want f_name action column button i'll pass page filter grid.

i recommend use arrayhelper::getvalue .

for example:

arrayhelper::getvalue($model, 'f_name') 

will work when $model object (model or activerecord), array or empty (=null). moreover, has 3nd argument default value:

arrayhelper::getvalue($model, 'f_name', 'value returned when attribute not found in $model') 

Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

python 3.5 - Pyqtgraph string in x tick -