我想在我的应用程序中搜索字段。我有penerimaan_table。有rm_codequantitybulanprice字段。

如何显示这样的结果:

rm_code            bulan
k123                  7
k123                  4
k123                  5


当我过滤时,我只想显示bulan 7&5

k123                  7
k123                  5


我怎样才能做到这一点?

这是我的看法:

<?php

use yii\helpers\Html;
use kartik\grid\GridView;
use kartik\export\ExportMenu;

/* @var $this yii\web\View */
/* @var $searchModel backend\models\PenerimaanSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Penerimaan Raw Material';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="penerimaan-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Tambah Penerimaan Raw Material', ['create'], ['class' => 'btn btn-success']) ?>
        <?= Html::a('Import Penerimaan', ['import'], ['class' => 'btn btn-success']) ?>

    </p>

    <p><font color="red">Deskripsi Barang yang kosong merupakan Barang Baru!!</p></font>

    <?php
    echo ExportMenu::widget([
        'dataProvider' => $dataProvider,
        'columns' => [


          //  'id',
            'rm_code',
            'rmCode.deskripsi_barang',

          'saldo_awal',
            'quantity',
            'bulan',
            //'price',

            'total'

            ],
            'showPageSummary' => true,
        ]); ?>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
          ['class' => 'kartik\grid\SerialColumn'],

          //  'id',
            'rm_code',
            'rmCode.deskripsi_barang',

          //  'saldo_awal',
            'quantity',
            'bulan',
            [
                      'attribute' => 'price',
                      'label' => 'Price',
                      'footer' => $myAverage,
                    ],
            //'price',

            [
                        'label' => 'Total',
                        'attribute' => 'total',
                        'pageSummary' => true,
                      //  'pageSummaryOptions' => ['id_layanan' => 'deskripsi'],
                        'value' => function ($model) {
                        if($model)
                            return $model->total ;
                        else
                            return 0;
                        }
                    ],
            ['class' => 'kartik\grid\ActionColumn'],

        ],
         'showPageSummary' => true,
    ]); ?>
    <?php echo"Harga Rata-rata Barang adalah:";
    $myAverage = 0;
    $myTot  =0;
    $myCnt = 0;
    $data = $dataProvider->getModels();

    foreach ($data as $key => $value) {
        $myTot += $value['price'];
        $myCnt++;
    }
    if ($myCnt>0){
      $myAverage = $myTot/$myCnt;
    }
   echo $myAverage;  // your average displayed herre, you can place it wherever you want.
      ?>
    <?php
$this->registerJs("
// 1. Dapatkan handle dari tabel gridview
table = $('div.grid-view > table');

// 2. Hitung kolom tertentu, pada contoh ini menghitung nilai total pada kolom ke 3
var sum = 0;
table.find('tbody').find('tr').each(function() {
sum += parseInt($(this).find('td:nth-child(4)').text());
});

// 3. Tampilkan hasil perhitungan pada tabel baris terakhir kolom ke 3
table.find('tfoot > tr > td:nth-child(4)').text(sum);

");
?>
</div>

最佳答案

问题1:验证者

在您的PenerimaanSearch模型中,删除bulan字段的整数验证器。并添加两个新的如下:

public function rules() {
    //...
    [['bulan'], 'integer', 'when'=>function($model) {
        return strpos($model->bulan, '&') === false;
    }],
    [['bulan'], 'string', 'when'=>function($model) {
        return strpos($model->bulan, '&') !== false;
    }],
    //...
}


仅当不存在&时,才将您的字段验证为整数。否则,它将使用字符串验证器。最佳方法是使用regex-v&onle,但是我敢肯定您会弄清楚该怎么做。

问题2:搜索模型中的功能

再次在BulanSearch中可以找到search()方法,该方法负责按属性过滤结果。删除所有与bulan字段有关的操作,而使用以下命令:

public function search($params)
{
    //...
    if (!empty($this->bulan)) {
        if (strpos($this->bulan, '&') !== false) {
            $bulan = $this->bulan;
        } else {
            //filter with int
            $bulan = explode('&', $this->bulan);
        }
        $this->andFilterWhere(['bulan'=>$bulan]);
    }
    //...
}


这应该够了吧。 andFilterWhere自行决定使用IN条件(多个值)还是常规比较(单个值)。

这应该可以解决问题!但是,请告诉我您是否有问题。我很乐意为您服务!

10-08 04:18