Ошибка Zend Framework 2: оператор не может быть выполнен при реализации функции year в табличном шлюзе

0

Я реализовал инструкции 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-framework2

1 ответ

1
Лучший ответ

по умолчанию zend будет считать, что вы greaterOrEqualTo столбец в greaterOrEqualTo. Если вы хотите изменить это, вам нужно использовать выражение Zend db.

+ Изменить

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

С

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

Кстати, вы должны распечатать реальный sql, сгенерированный с помощью ZF, чтобы найти то, что не работает.

Надеюсь, это решит проблему

  • 0
    Спасибо, @Unex его работы, и у меня есть идея, чтобы завершить свою работу, и я надеюсь, что она работает нормально $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); });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню