Интересно, почему этот запрос не работает? Это оператор построителя запросов:
$this->getBuilder()
->select('code', 'name', 'date')
->groupBy('name', 'code')
->having('MAX(date)')
->get()
Что вызывает эту ошибку:
SQLSTATE[HY000]: General error: 1 near "?": syntax error (SQL: select "code", "name", "date" from "rival_rates" group by "name", "code" having "MAX(date)" ) (Illuminate\Database\QueryException)
Я не знаю, где находится знак вопроса, там нет никаких параметров.
Если я запускаю запрос sql через командную строку mysql, он работает:
mysql> select code, name, date from rival_rates group by name, code having MAX(date);
+------+------+------------+
| code | name | date |
+------+------+------------+
| 100 | tal | 2014-10-01 |
| 100 | tal2 | 2014-10-05 |
| 200 | tal2 | 2014-10-03 |
+------+------+------------+
3 rows in set (0.00 sec)
mysql>
Если я удаляю «имеющую» часть, это работает. Что не так с этим ?
Заранее спасибо.
Тебе нужно havingRaw
:
$this->getBuilder()
->select('code', 'name', 'date')
->groupBy('name', 'code')
->havingRaw('MAX(date)')
->get()
У вас есть проблема в синтаксисе.
$this->getBuilder()
->select('code', 'name', 'date')
->groupBy('name', 'code')
->having('MAX(date)')
->get()
Здесь для предложения требуется 3 аргумента: ->having('MAX(date)', '>=', '2014-09-25')
Примечание. Первый аргумент относится к имени столбца, второй — к оператору сравнения, а третий — к значению сравнения.
$condition = 'MAX(date)';
$this->getBuilder()
->select('code', 'name', 'date')
->groupBy('name', 'code')
->having($condition)
->get()
Это тоже будет работать. Если вы не хотите указывать параметр в предложении.