Я новичок в ColdBox (и в mvc в целом) и пытался разобраться в этом сам, но безрезультатно. Функция поиска отлично работает на нашем процедурном сайте, и я пытаюсь намочить ноги, постепенно переключая ее на mvc.
На моем тестовом сайте mvc у меня есть запрос, который при выполнении на моей локальной машине правильно возвращает ожидаемые элементы. Но когда он запускается на действующем сайте, он повторяет первый элемент, сколько бы элементов ни было в возвращаемом массиве.
Локальная машина: ColdBox 4.3, Lucee 4.5.5, MySQL 5.6.37, PHPMyAdmin 4.4.15
В прямом эфире: ColdBox 4.3, ACF 2016, MySQL 5.7, PHPMyAdmin 4.6.6
Вот функция в моем CFC:
function getMilestonesByDate(required string pickedMonth='', required string pickedDay='') {
transaction {
queryMilestonesByDate = queryExecute("
SELECT tbl_milestones.ID as milestoneID, tbl_milestones.event, tbl_milestones.date
FROM tbl_milestones
WHERE MONTH(tbl_milestones.date) = :pickedMonth AND DAY(tbl_milestones.date) = :pickedDay AND YEAR(tbl_milestones.date) != 1111
ORDER BY tbl_milestones.date ASC
", {
pickedMonth: {value: arguments.pickedMonth, cfsqltype: "cf_sql_varchar"},
pickedDay: {value: arguments.pickedDay, cfsqltype: "cf_sql_varchar"}
}
);
}
milestonesByDate = arrayNew(1);
for (row in queryMilestonesByDate) {
returnStruct = StructNew();
returnStruct["milestoneID"] = queryMilestonesByDate.milestoneID;
returnStruct["event"] = queryMilestonesByDate.event;
returnStruct["date"] = dateFormat(queryMilestonesByDate.date, "full");
arrayAppend(milestonesByDate, returnStruct);
}
return serializeJSON(milestonesByDate);
}
Опять же, это отлично работает локально. Например, он покажет две разные вехи на 26 декабря — одну в 1986 году и одну в 1995 году. Но на живом сайте веха 1986 года будет показана дважды.
Однако запуск только SQL в PHPMyAdmin на реальном сайте работает так, как ожидалось:
SELECT tbl_milestones.ID as milestoneID, tbl_milestones.event, tbl_milestones.date
FROM tbl_milestones
WHERE MONTH(tbl_milestones.date) = '12' AND DAY(tbl_milestones.date) = '26' AND YEAR(tbl_milestones.date) != 1111
ORDER BY tbl_milestones.date ASC
Так что с запросом все в порядке. Но что-то где-то мутится, и я не могу понять. Если это поможет, вот вызов функции в моем обработчике событий:
function showMilestonesByDate( event, rc, prc ) {
prc.milestonesByDate = milestoneModel.getMilestonesByDate(pickedMonth,pickedDay);
event.renderData( type="json", data=prc.milestonesByDate );
}
Значения для выбранного месяца и выбранного дня поступают из средства выбора даты пользовательского интерфейса jQuery. Я могу опубликовать этот код, если кто-то считает, что это будет полезно. Но просто вывод результатов запроса из жестко закодированных значений на тестовой странице показывает одну и ту же проблему, независимо от того, используется ли средство выбора даты или даже присутствует ли оно на странице.
Обратите внимание, что все это отлично работает на нашем процедурном сайте, но мне трудно переключиться на mvc, и я был бы признателен за любые советы или предложения о том, где я ошибаюсь! Спасибо всем заранее!
ОБНОВЛЕНИЕ: вот дамп prc.milestonesByDate с местного сайта:
[{"date":"Пятница, 26 декабря 1986 г.","event":"Первый полет российского Ми-34","milestoneID":435},{"date":"Вторник, 26 декабря 1995 г." ,"event":"Первый полет корабля HAL Dhruv (Protoype PT4) ВМС Индии","milestoneID":428}]
И то же самое в прямом эфире:
[{"date":"Пятница, 26 декабря 1986 г.","milestoneID":435,"event":"Первый полет российского Ми-34"},{"date":"Пятница, 26 декабря 1986 г." ,"milestoneID":435,"event":"Первый полет российского Ми-34"}]