使用表达式DBQuery Yii2选择SQL时出错
iam使用此命令来联合3个不相关的表。在表B和表C中,这两种方法效果良好。但是表A出现了错误使用表达式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
$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_wpmfwpLEFT JOINmfwp
中使用近“.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先生怎么样?