2017-12-19 13 views
0

私はzf2プロジェクトでtablegatewayステートメントを実装しましたが、今年mysql year関数を使用したときに問題が発生しました。これは私のコードZend Framework 2エラー:テーブルゲートウェイで年機能を実装したときにステートメントを実行できませんでした

コードです:

$where = new Where(); 
$classYearMin = $classYear - 1; 
$where->greaterThanOrEqualTo('year(date_a)', $classYear) 
->and 
->equalTo('id_type',1) 
->and 
->notEqualTo('semester_type','concat("B_","'.$classYearMin.'","/","'.$classYear.'")'); 
$sql= $this->tableGateway->select(function (Select $select) use ($where) { 
    $select 
    ->columns(array('semester_type')) 
    ->order('date_a') 
    ->where($where); 
}); 

と私のmysql出力構文:

構文:

select semester_type 
from skedul 
where year(date_a) >= 2010 
    and id_type = 1 
    and semester_type != concat('B_',2010-1,'/',2010) 
order by date_a; 

エラー出力

声明は(42S22 - 1054 - 不明な列 '年( date_a`')を実行することができませんでした 'where句' 内)

は、誰も私を助けることができますか?おかげさまでありがとう私の悪い英語のためにごめんなさい

+0

MySQLの出力構文を解決する

希望は私が「、2010-1、skedul年(date_a)> = 2010とID_TYPE = 1からsemester_typeを選択し、semester_type!= CONCAT( 'B _' '希望しました/ '、2010)order by date_a; – edrianhadinata

答えて

1

デフォルトでは、zendはあなたにgreaterOrEqualToで列を与えていると仮定します。それを変更したい場合は、Zend db式を使用する必要があります。

$where->greaterThanOrEqualTo(new \Zend\Db\Sql\Expression('year(date_a)'), $classYear) 

変更

$where->greaterThanOrEqualTo('year(date_a)', $classYear) 

ところで、あなたは動作しないものを見つけるためにZFで生成された実際のSQLを印刷する必要があります。これが問題

+0

ありがとうございました@Unexその作品と私は私の仕事を完了するためのアイデアがあり、それがうまくいくことを願っています '$ where = new Where(); $ classYearMin = $ classYear - 1; $ where-> greaterThanOrEqualTo(新しい\ Zendの\ Dbの\のSql \式( '年(date_a)')、$ classYear) - >と - > equalTo( 'ID_TYPE'、1) - >と - > '、'/'、' '$ classYear' ')')););););););) ( 'semester_type')) - > order( 'date_a') - > $ sql = $ this-> tableGateway-> select(function(Select $ select)){ $ select - > where($ where); }); ' – edrianhadinata

関連する問題