Extra Form
PHP PHP 7.2
CMS Rhymix 2.x

<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;

 

이렇게 존재하지 않는 값을 넣는 황당한 방법을 썼는데요.

 

이런 경우 제대로 처리하는 방법이 궁금합니다.

  • profile
    저라면 target_srls 없을 경우 그냥 쿼리를 안 날리도록 만들 것 같네요
  • profile profile
    그렇긴 한데

    Context::set('page_navigation', $d->page_navigation);
    이부분에서 에러가 날 것 같더라구요.

    요기도 처리를 해줘야 할 것 같고....

    쿼리를 날리지 않고 목록이 없는 결과로 처리하는 방법으로 처리할 수 있다면 그 방법도 고려했었긴 했습니다.
  • profile

    값이 없는데 검색 조건은 적용되기를 원한다면 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를 넘기면 됩니다.

  • profile profile
    빈 값이 아닌 특정 값을 넣는게 맞는 방법 이군요. 얼떨결에 그렇게 처리가 된거네요.
    비회원 게시글에서 회원번호 0을 가지는것 같기도 하고 해서 우연히 999999999 회원번호를 가지는 1인이 생긴다고 해도 크게 문제가 될 것 같지 않아서 일단은 999999999 로 넣었는데 음수값으로 바꾸던지 해봐야겠습니다.
  • profile profile

    그럼 쿼리를 하지 않고

    Context::set('page_navigation', $d->page_navigation);

    이부분에서 결과적으로 1페이지만 가지는 결과를 만들어주려면 선행코드로 어떻게 작성해 주면 좋을까요?

    실제로는 $d 쿼리 결과의 page_navigation 을 재설정 하도록 되어 있습니다.

    리스트,현재페이지,토탈페이지,이전,다음 등을 정의해 줘야 할 것 같긴 합니다.

  • profile profile
    네, 비회원까지 고려한다면 -1이 좋겠습니다. RXE에서 member_srl 값이 -1이 되려면 원래 값이 1인 회원이 익명으로 글을 써야 하는데, 설치 직후 회원번호가 4부터 시작하니까 이런 경우는 존재하지 않겠지요.
  • profile profile
    글쎄요, 다른 쿼리에서 나온 page_navigation을 그대로 재사용하는 경우를 본 적이 없어서 어떤 부작용이 있을지는 예상하기 힘듭니다.

    쿼리를 할 필요가 없는 경우 page_navigation을 완전히 가짜로 만들어서 넣어주는 트릭은 슈퍼캐시에서 사용하고 있기는 합니다.