Я пытаюсь получить данные с предложением HAVING.
Вот мой код,
//Main Table
$select->from(array('cre' => 'credit'));
//company Table
$select->join(array('com' => 'company), 'cre.account_id = com.account_id');
$select->join(array('u' => 'user'), 'cre.approved_by = u.id', array('first_name', 'last_name'), 'left');
$select->join(array('acc' => 'account'), 'cre.account_id = acc.id', array('id'), 'left');
$startDate = \DateTime::createFromFormat('d-m-Y H:i:s', $startDate.' 00:00:00')->format('Y-m-d H:i:s');
$endDate = \DateTime::createFromFormat('d-m-Y H:i:s', $endDate.' 23:59:59')->format('Y-m-d H:i:s');
$between = new Zend\Db\Sql\Predicate\Between('cre.'.$filter, $startDate, $endDate);
$select->having
->nest
->equalTo('cre.paid', 0)
->and
->equalTo('cre.status', 'approved')
->and
->greaterThanOrEqualTo('cre.due_date', $currentDate)
->unnest
->or
->nest
->equalTo('cre.account_id', "acc.id")
->and
->equalTo('com.account_id', "acc.id")
->and
->greaterThanOrEqualTo('com.credit_max_amount', 'sum(cre.amount)')
->and
->equalTo('cre.paid', 0)
->and
->equalTo('cre.status', 'approved')
->unnest;
Это производит правильный запрос для меня. И после $select->getSqlString();
Произведенный запрос успешно выполняется в моем phpmyadmin.
Но когда я на самом деле запустить код, ошибка показывает,
Оператор не может быть создан с помощью sql: SELECT COUNT (1) AS
C
ОТ (ВЫБРАТЬcom
,name
КАКcom_name
,cre
,amount
КАКcre_amount
,cre
,status
КАКcre_status
,cre
,paid
КАКcre_paid
,cre
,created_on
КАКcre_created_on
,cre
,approval_date
КАКcre_approval_date
,u
,first_name
КАКu_first_name
,u
,last_name
КАКu_last_name
, CONCAT (u.first_name, «», u.last_name) ASapproved_by
,cre
,due_date
КАКcre_due_date
,cre
,id
КАКcre_id
ОТcredit
КАКcre
ВНУТРЕННЕЕ СОЕДИНЕНИЕcompany
КАКcom
НАcre
,account_id
знак равноcom
,account_id
ЛЕВЫЙ РЕЙТИНГuser
КАКu
НАcre
,approved_by
знак равноu
,id
ЛЕВЫЙ РЕЙТИНГaccount
КАКacc
НАcre
,account_id
знак равноacc
,id
ГДЕcre
,created_on
МЕЖДУ? А ТАКЖЕ ? ЕСТЬ (cre
,paid
знак равно А ТАКЖЕcre
,status
знак равно А ТАКЖЕcre
,due_date
> =?) ИЛИ (cre
,account_id
знак равно А ТАКЖЕcom
,account_id
знак равно А ТАКЖЕcom
,credit_max_amount
> =? А ТАКЖЕcre
,paid
знак равно А ТАКЖЕcre
,status
=?)) КАКoriginal_select
В чем проблема? Где я не прав?
Задача ещё не решена.
Других решений пока нет …