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,看看有什么不行。
希望这能解决问题
我已经在我的 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,看看有什么不行。
希望这能解决问题