Я реализовал инструкции tablegateway в моем проекте zf2, но теперь у меня проблема, когда я использовал функцию mysql year 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') 'in' where clause ')
Может кто-нибудь мне помочь? Спасибо заранее и извините за мой плохой английский
по умолчанию zend будет считать, что вы greaterOrEqualTo
столбец в greaterOrEqualTo
. Если вы хотите изменить это, вам нужно использовать выражение Zend db.
+ Изменить
$where->greaterThanOrEqualTo('year(date_a)', $classYear)
С
$where->greaterThanOrEqualTo(new \Zend\Db\Sql\Expression('year(date_a)'), $classYear)
Кстати, вы должны распечатать реальный sql, сгенерированный с помощью ZF, чтобы найти то, что не работает.
Надеюсь, это решит проблему
$where = new Where(); $classYearMin = $classYear - 1; $where->greaterThanOrEqualTo(new \Zend\Db\Sql\Expression('year(date_a)'), $classYear) ->and ->equalTo('id_type',1) ->and ->notEqualTo('semester_type',new \Zend\Db\Sql\Expression('concat("B_","'.$classYearMin.'","/","'.$classYear.'")')); $sql= $this->tableGateway->select(function (Select $select) use ($where) { $select ->columns(array('semester_type')) ->order('date_a') ->where($where); });