使用表达式DBQuery Yii2选择SQL时出错

使用表达式DBQuery Yii2选择SQL时出错,yii2,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

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服务器版本相对应的手册,以了解在第2行SMwp.idwp=mfwp.id左连接“u”上的
sm_wp
mfwp
LEFT JOIN
mfwp
中使用近“.
perihal
的正确语法

如果我纠正成这样,那就是工作

    $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中的字符串时,不会显示任何数据(未设置值)

我的代码怎么了谢谢你的建议

更新:这是我的modelsearch

<?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;
}
}

向您展示搜索模型代码以及当前查询或gridviewnow考虑创建一个表作为该选项值的引用的问题。因此我可以创建关系并随时调用它。您认为aslam先生怎么样?