Zend Framework 2 error : Statement could not be executed when implement year function in table gateway

Zend Framework 2 error : Statement could not be executed when implement year function in table gateway

我已经在我的 zf2 项目中实现了 tablegateway 语句,但是现在我在使用 mysql year 函数时遇到了问题,因为我将它剪到了 greaterThanOrEqualTo 函数中。这是我的代码

代码:

$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;

错误输出

Statement could not be executed (42S22 - 1054 - Unknown column 'year(date_a`)' in 'where clause')

谁能帮帮我?提前致谢,抱歉我的英语不好

默认情况下,zend 会假定您在 greaterOrEqualTo 中给出一列。如果你想改变你需要使用 Zend 数据库表达式。

改变

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

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

顺便说一句,你应该打印用ZF生成的真正的sql,看看有什么不行。

希望这能解决问题