我已经在ZF2项目中实现了TableGateway语句,但是现在我使用MySQL年函数couse时会有问题,我将其剪切到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;
和错误输出
无法执行语句(42S22-1054-未知列'年
(
date_a`)'where子句')
有人可以帮我吗?预先感谢,对不起,我的英语不好
默认情况下,Zend将假定您在greaterOrEqualTo
中提供了一列。如果您想更改需要使用Zend DB表达式。
更改
$where->greaterThanOrEqualTo('year(date_a)', $classYear)
$where->greaterThanOrEqualTo(new ZendDbSqlExpression('year(date_a)'), $classYear)
顺便说一句,您应该打印使用ZF生成的真实SQL,以查找不起作用的内容。
希望这将解决问题