2017-12-26 17 views
4

내가 (일반 및 MVC) 냉각 박스에 새로운 오전과 아무 소용이, 자신이 분류하는 노력 해왔다에 시간. 찾는 기능은 우리의 절차 사이트에서 잘 작동하며, 비트로 mvc로 전환하면 젖은 발로 젖게하려고합니다. 내 MVC 테스트 사이트에 쿼리하지만이 첫 번째 요소를 반복 [N] 라이브 사이트

, 내 로컬 컴퓨터에서 실행될 때, 제대로 예상되는 요소를 반환하는 쿼리가 있습니다. 그러나 라이브 사이트에서 실행될 때 많은 요소가 반환 된 배열에있는 경우 첫 번째 요소를 반복합니다.

지역 기계 : 냉각 박스 4.3, Lucee 4.5.5, MySQL은 5.6.37, phpMyAdmin을 4.4.15

라이브 : 냉각 박스 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); 
} 

다시 말하지만이 방법은 로컬에서도 잘 작동합니다. 예를 들어, 12 월 26 일에는 1986 년과 1995 년에 각각 두 가지 마일스톤이 표시됩니다. 그러나 라이브 사이트에서는 1986 년의 두 가지 마일스톤이 두 번 표시됩니다.

그러나, 라이브 사이트에 phpMyAdmin을 단지 SQL을 실행하는 예상대로 작동합니다

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를 UI의 날짜 선택기에서 온 : 도움이된다면, 여기 내 이벤트 핸들러에서 함수에 대한 호출입니다. 아무도 도움이된다고 생각한다면 그 코드를 게시 할 수 있습니다. 하지만 테스트 페이지에서 하드 코드 된 값의 쿼리 결과를 덤프하는 것은 datepicker가 사용되었는지 또는 페이지에 있는지 여부에 관계없이 동일한 문제를 보여줍니다. 이 모두가 우리의 절차 사이트에서 잘 작동하지만 내가 힘든 시간 MVC에 물건을 전환하고 내가 잘못 가고 위치에 어떤 조언이나 제안을 감사하겠습니다을 겪고 있음을

주의! 미리 감사드립니다.

UPDATE : 여기에 로컬 사이트에서 prc.milestonesByDate의 덤프입니다

[{ "날짜": "1986년 12월 26일 (금요일)", "이벤트": "러시아 밀 Mi-의 첫 비행 348 ","milestoneID ": 435}, {"date ":"Tuesday, December 26, 1995 ","event ":"인도 해군 HAL Dhruv (Protoype PT4)의 첫 비행 ","milestoneID ": 428}]

그리고 라이브에서 같은 일 :

[{ "날짜": "1986년 12월 26일 (금요일)", "milestoneID": 435, "이벤트": "러시아 밀 미-34의 첫 비행"} { "date": "1986 년 12 월 26 일 금요일", "milestoneID": 435, "event": "러시아 밀 Mil M의 첫 비행 I-34 "}]

답변

4

여기서 일어나는 문제 와 ACF Lucee에서 쿼리의 for 루프가 약간 다른 작동한다는 것이다.

이유에 대해 잘 모르겠습니다. 그러나 내가 관찰 한 것은 Lucee의 for 루프가 <cfloop query="">처럼 작동한다는 것입니다. 그러나 ACF에서는 그렇지 않습니다. ACF에서 변수 row을 루프 내에서 queryMilestonesByDate 대신 사용해야합니다.

for (row in queryMilestonesByDate) { 
    returnStruct = StructNew(); 
    returnStruct["milestoneID"] = queryMilestonesByDate.milestoneID; 
    returnStruct["event"] = queryMilestonesByDate.event; 
    returnStruct["date"] = dateFormat(queryMilestonesByDate.date, "full"); 
    arrayAppend(milestonesByDate, returnStruct); 
} 

그래서 순서대로 루프는 모두 ACF에서 일할과 Lucee은 당신이 (당신이 for (row in queryMilestonesByDate)을 사용하고 있기 때문에 내가 올바른 접근 방법이라고 생각하는) 다음으로 변경할 수 있습니다.

for (row in queryMilestonesByDate) { 
    returnStruct = StructNew(); 
    returnStruct["milestoneID"] = row.milestoneID; 
    returnStruct["event"] = row.event; 
    returnStruct["date"] = dateFormat(row.date, "full"); 
    arrayAppend(milestonesByDate, returnStruct); 
} 

어떻게 작동하는지에 대한 예.

ACF

Lucee

+1

많은 감사, RRK! 그건 실제로 트릭을 했어 - Lucee와 ACF에서 문제 없어요. 당신의 도움을 주셔서 대단히 감사합니다! 나는 어디서부터 시작할 지조차 몰랐다. 하지만 당신 덕분에 ACF와 Lucee의 차이점에 대해 더 많이 살펴 보았습니다. 이것을 읽는 다른 사람을 위해, https://www.raymondcamden.com/2015/10/01/some-cool-things-in-lucee/ "는 당신을 시작하게하는 레이 캠든 (Ray Camden)의 좋은 게시물입니다. – daltec

+0

어쨌든'row' 변수를 사용하지 않는 이유는? 쿼리를 반복하면서 쿼리의 각 행을 인덱스로 설정 한 다음 해당 인덱스에 대한 레코드를 출력하는 것입니다. for (row in query)'는'for (query in x) '일 수 있고'query' 대신'x'를 참조 할 수 있습니다. 이전에 루핑 문제를 보았습니다.'query.variable'에서 ACF는'query' 변수의 각 행 대신 각 루프의'query'에'variable'의 첫 번째 인스턴스를 리턴합니다. – Shawn

+0

안녕하세요 Shawn, 팁 주셔서 감사합니다! ol '.이 함수는 단지 하나의 함수에서 사용되었을 때 루프 내에서 범위 지정을 할 필요가 없었습니다. – daltec