쿼리시 빈 값으로 요청하는 경우
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.2 |
<condition operation="in" column="documents.member_srl" var="target_srls" pipe="and" />
위와 같이 target_srls의 array 값이 해당 컬럼에 있는 경우의 조건으로 조회하도록 했는데요.
target_srls 을 가지지 못한채 쿼리를 하는 경우 리스트가 없는 결과가 나오길 기대하는데 target_srls 없이 쿼리를 하면 너무나 당연하게 모든 대상이 조회되어 출력이 됩니다.
그래서 꼼수로 target_srls 값이 없는 경우
$args->target_srls = 999999999;
이렇게 존재하지 않는 값을 넣는 황당한 방법을 썼는데요.
이런 경우 제대로 처리하는 방법이 궁금합니다.
댓글 7
Context::set('page_navigation', $d->page_navigation);
이부분에서 에러가 날 것 같더라구요.
요기도 처리를 해줘야 할 것 같고....
쿼리를 날리지 않고 목록이 없는 결과로 처리하는 방법으로 처리할 수 있다면 그 방법도 고려했었긴 했습니다.
값이 없는데 검색 조건은 적용되기를 원한다면 0, -1, 999999999 등 존재하지 않는 값을 넣는 것이 맞습니다. 999999999는 언젠가 정말로 일치하는 srl값이 나올지도 모르니, 0이 더 확실하겠지요.
----- 나중에 검색하시는 분을 위한 자세한 정보입니다. -----
XE에서 쿼리 조건이 무력화되는 기준이 분명하게 매뉴얼화되어 있지 않아서 시행착오로 찾아내시는 분들이 많은데요, <condition> 태그에 NULL, 빈 문자열(""), 빈 배열([]), 또는 빈 문자열 하나만 들어 있는 배열([""])을 넣으면 해당 조건이 무력화됩니다. 그러나 숫자 0은 정상적인 쿼리 조건으로 인식합니다. in으로 배열을 넘기는 경우에도 [0]은 쿼리 조건으로 인식합니다.
INSERT, UPDATE 쿼리에서 DB에 입력할 값을 지정하는 <column> 태그에서는 빈 문자열("")도 인식합니다. 빈 문자열을 입력할 수도 있어야 하니까요. 게다가 이 상황에 배열을 사용하는 것은 무의미하므로, 사실상 NULL 외에는 모두 그대로 입력된다고 보면 됩니다.
라이믹스 2.0 이상 버전에서 빈 문자열 그대로 검색하고 싶다면 new Rhymix\Framework\Parsers\DBQuery\EmptyString을 넘기면 됩니다. NULL을 그대로 입력하고 싶다면 new Rhymix\Framework\Parsers\DBQuery\NullValue를 넘기면 됩니다.
비회원 게시글에서 회원번호 0을 가지는것 같기도 하고 해서 우연히 999999999 회원번호를 가지는 1인이 생긴다고 해도 크게 문제가 될 것 같지 않아서 일단은 999999999 로 넣었는데 음수값으로 바꾸던지 해봐야겠습니다.
그럼 쿼리를 하지 않고
Context::set('page_navigation', $d->page_navigation);
이부분에서 결과적으로 1페이지만 가지는 결과를 만들어주려면 선행코드로 어떻게 작성해 주면 좋을까요?
실제로는 $d 쿼리 결과의 page_navigation 을 재설정 하도록 되어 있습니다.
리스트,현재페이지,토탈페이지,이전,다음 등을 정의해 줘야 할 것 같긴 합니다.
쿼리를 할 필요가 없는 경우 page_navigation을 완전히 가짜로 만들어서 넣어주는 트릭은 슈퍼캐시에서 사용하고 있기는 합니다.