使用表达式DBQuery Yii2选择SQL错误

时间:2019-10-13 15:41:39

标签: yii2

iam使用它来合并3个不相关的表。在表B和表C中工作正常。但是表A出错了

     $tableA = (new \yii\db\Query())
    ->select([new Expression('sm_wp.no_agenda,"Wajib Pajak" as kategori,mfwp.nama_wp,
              user.nama,sm_wp.jenis_surat'),
              "sm_wp.nomor_surat, sm_wp.tgl_surat, sm_wp.perihal",])
    ->from('sm_wp')
    ->leftjoin('mfwp', 'sm_wp.id_mfwp = mfwp.id')
    ->leftjoin('user', 'user.id = sm_wp.id_user')
    ;

错误:

SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有一个错误;请参见语法。检查与您的MariaDB服务器版本相对应的手册,以在'。perihal FROM sm_wp左联接mfwp上使用正确的语法sm_wp.id_mfwp = mfwp.id左联接'u'在第二行

如果我正确地说是这样,它的工作..

    $tableA = (new \yii\db\Query())
    ->select([new Expression('sm_wp.no_agenda,"Wajib Pajak" as kategori,mfwp.nama_wp,
              user.nama,sm_wp.jenis_surat, sm_wp.nomor_surat, sm_wp.tgl_surat, sm_wp.perihal'),])
    ->from('sm_wp')
    ->leftjoin('mfwp', 'sm_wp.id_mfwp = mfwp.id')
    ->leftjoin('user', 'user.id = sm_wp.id_user')
    ;

其工作(数据在gridview中显示为整数)。但是当我想使用if语句将sm_wp.jenis_surat定义为gridview中的字符串时,没有数据出现(未设置值)。

我的代码有什么问题。.感谢您的建议

更新:这是我的模型搜索

<?php

namespace app\models;
use yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\Smwp;
use app\models\Mfwp;
use app\models\Pejabat;
use yii\db\Expression;


class RekapsmSearch extends Rekapsm
{
/**
 * {@inheritdoc}
 */


public $nama_wp;
public $kategori;
public $nama;

public function rules()
{
    return [
        [['no_agenda', 'jenis_surat'], 'integer'],
        [['perihal', 'nama_wp', 'nama', 'kategori', 'nomor_surat', 'tgl_surat'], 'safe'],
    ];
}

/**
 * {@inheritdoc}
 */
public function scenarios()
{
    // bypass scenarios() implementation in the parent class
    return Model::scenarios();
}

/**
 * Creates data provider instance with search query applied
 *
 * @param array $params
 *
 * @return ActiveDataProvider
 */
public function search($params)
{
    $tableA = (new \yii\db\Query())
    ->select([new Expression('sm_wp.no_agenda,"Wajib Pajak" as kategori,mfwp.nama_wp,
              user.nama, sm_wp.jenis_surat, 
              sm_wp.nomor_surat, sm_wp.tgl_surat, sm_wp.perihal'),])
    ->from('sm_wp')
    ->leftjoin('mfwp', 'sm_wp.id_mfwp = mfwp.id')
    ->leftjoin('user', 'user.id = sm_wp.id_user')
    ;


    $tableB = (new \yii\db\Query())
    ->select([new Expression('sm_seksi.no_agenda, "Seksi" as kategori, 
              mfseksi.nama_seksi,user.nama, if(sm_seksi.jenis_surat=1,"Permintaan Laporan",
              if(sm_seksi.jenis_surat=2,"Permintaan Data",
              if(sm_seksi.jenis_surat=3,"Permintaan Profile",
              "Lain - Lain")))                
              '),"concat('ND-',sm_seksi.nomor_surat,'',mfseksi.kode_surat,
              date_format(sm_seksi.tgl_surat,'%Y')),
              sm_seksi.tgl_surat,sm_seksi.perihal",])
    ->from('sm_seksi')
    ->leftjoin('mfseksi', 'sm_seksi.id_pejabat = mfseksi.id')
    ->leftjoin('user', 'user.id = sm_seksi.id_user')    
    ;
    //echo $tableA->createCommand()->getRawSql();
    //echo $tableB->createCommand()->getRawSql();
    $tableC = (new \yii\db\Query())
    ->select([new Expression('sm_kpp.no_agenda,"KPP" as kategori, mfkpp.nama_kantor,
              user.nama, if(sm_kpp.jenis_surat=1,"Pemberitahuan",
              if(sm_kpp.jenis_surat=2,"Permintaan Data",
              if(sm_kpp.jenis_surat=3,"Permintaan Profile",
              "Lain - Lain"))), 
              sm_kpp.nomor_surat, sm_kpp.tgl_surat,sm_kpp.perihal'),])
    ->from('sm_kpp')
    ->leftjoin('mfkpp', 'sm_kpp.id_kpp = mfkpp.id')
    ->leftjoin('user', 'user.id = sm_kpp.id_user')       
    ;

    $unionQuery = (new \yii\db\Query())
    ->from(['dummy_name' => $tableA->union($tableB)->union($tableC)]);

    $query = $unionQuery;
    $dataProvider = new ActiveDataProvider([
        'query' => $query,

    ]);
    $dataProvider->sort->attributes['nama_wp'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['nama_wp' => SORT_ASC],
        'desc' => ['nama_wp' => SORT_DESC],
    ];

    $dataProvider->sort->attributes['no_agenda'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['no_agenda' => SORT_ASC],
        'desc' => ['no_agenda' => SORT_DESC],
    ];

    $dataProvider->sort->attributes['jenis_surat'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['jenis_surat' => SORT_ASC],
        'desc' => ['jenis_surat' => SORT_DESC],
    ];

    $dataProvider->sort->attributes['nomor_surat'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['nomor_surat' => SORT_ASC],
        'desc' => ['nomor_surat' => SORT_DESC],
    ];

    $dataProvider->sort->attributes['tgl_surat'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['tgl_surat' => SORT_ASC],
        'desc' => ['tgl_surat' => SORT_DESC],
    ];

    $dataProvider->sort->attributes['perihal'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['perihal' => SORT_ASC],
        'desc' => ['perihal' => SORT_DESC],
    ];

    $dataProvider->sort->attributes['kategori'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['kategori' => SORT_ASC],
        'desc' => ['kategori' => SORT_DESC],
    ];

    $dataProvider->sort->attributes['nama'] = [
        // The tables are the ones our relation are configured to
        // in my case they are prefixed with "tbl_"
        'asc' => ['nama' => SORT_ASC],
        'desc' => ['nama' => SORT_DESC],
    ];

    $this->load($params);

    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([            
        'no_agenda' => $this->no_agenda,
        'jenis_surat' => $this->jenis_surat,
        'tgl_surat' => $this->tgl_surat,
    ]);

    $query
        ->andFilterWhere(['like', 'nama_wp', $this->nama_wp])
        ->andFilterWhere(['like', 'perihal', $this->perihal])
        ->andFilterWhere(['like', 'nomor_surat', $this->nomor_surat])
        ->andFilterWhere(['like', 'kategori', $this->kategori]) 
        ->andFilterWhere(['like', 'nama', $this->nama])                                  
        ;

    return $dataProvider;
}
}

enter image description here

在jenis surat上不会更改为字符串(表A),但在表B和C上可以正常工作

0 个答案:

没有答案
相关问题