질문을 삭제하지 말아주세요.!
 
1
0
-1

쿼리를 다음과 같이 짜는데.

select('store_name','store_state', IF((DATE(SUBDATE(NOW(), INTERVAL 7 DAY))) < storeRegdate,NEW,OLD) AS 'isnewstore')


다음과 같이 3번째 가져올 항목이 다음과 같이 표시가 되어야 하는데


저 부분을 raw()로 감싸줘도 에러가 나더라구요.


저런 경우에 출력해주려면 어떻게 처리해야 할지 질문드립니다.

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      해당 IF 부분부터만, DB:raw() 로 감싸지 마시고, 


      SELECT 부분 전체를 감싸보세요.


      DB:raw('store_name, store_state, IF((DATE(SUBDATE(NOW(), INTERVAL 7 DAY))) < storeRegdate,NEW,OLD) AS 'isnewstore'));

      1. akaHawk

        DB:raw( 를 쓰지 않고 하는 방법은 없을까요?


        ORM에서 전반적으로 DB:raw를 다른 방법으로 치환해서 쓰고 있어서

      2. 임환현

        글쎄요.. 저도 다른방법은 모르겠습니다..


        다른분들의 답변이 필요해보입니다. OTL..

      3. akaHawk

        가장 큰 문제는 IF((DATE(SUBDATE(NOW(), INTERVAL 7 DAY))) < storeRegdate,NEW,OLD) AS 'isnewstore' 이 부분을 unknown Column으로 찾고 있네요. storeRegdate가 있음에도..흠..

      4. 최진욱

        DB::raw() 를 쓰시면 안되는 상황인가요?

      5. 최진욱

        그게 아니라면 아래처럼 사용하면 가능할 거 같습니다.


        ->select('store_name', 'store_state')

        ->select(DB::raw('if((Date(subdate(now(), interval 7 day))) < storeRegdate ,NEW, OLD) AS isnewstore'))


        // 변환

        select if((Date(subdate(now(), interval 7 day))) < '2018-01-23' ,'NEW', 'OLD') AS 'isnewstore'

      6. akaHawk

        소스단에서 확인해보니 DB::raw는 raw로 치환이 되어있네요.

        그것보다 raw로 해도 여전히 저  IF구문을 제대로 읽어들이지 못하고 있습니다.


        raw('(case when (DATE(SUBDATE(NOW(), INTERVAL 7 DAY))) < storeRegdate) then "NEW" else "OLD" end) as isnewstore')


        이렇게 해봤는데,  이 에러만 뜨네요.

        Syntax error or access violation: 1064


      7. 최진욱

        로그를 확인해보시는게 가장 좋을 거 같습니다. 별다른 설정이 없으셨다면

        storage/logs/laravel.log에 쿼리 로그가 쌓일꺼에요.

      8. akaHawk

        ->select('store_name', 'store_state')

        ->select(DB::raw('if((Date(subdate(now(), interval 7 day))) < storeRegdate ,NEW, OLD) AS isnewstore'))


        이 방법이 가장 효과적이었던 것 같습니다. 감사합니다!

      9. 최진욱

        해결하셨다니 다행이네요. 즐프하세요 (wink)

      10. akaHawk

        그런데 뒤에 isnewstore값만 출력되긴 하는데, 이건 좀 더 봐야 될 거 같긴 하네요. 감사합니다.

      11. 최진욱

        저는 주로 쿼리빌더 기반으로 작업을 하다보니 ^^;;;

        풀 쿼리를 적어보면 아래와 같은 형태일텐데요

        DB::table('테이블명')

        ->select('store_name', 'store_state')

        ->select(DB::raw('if((Date(subdate(now(), interval 7 day))) < storeRegdate ,NEW, OLD) AS isnewstore'))


        요렇게 해도 'store_name', 'store_state' 부분이 안나오시나요?

      12. akaHawk

        이렇게 했는데, 맨 마지막 값만 출력되네요..흠..

        ->table('store_info')
        ->SELECT('store_name', 'store_state')
        ->SELECT($this->connection->raw('if((Date(subdate(now(), interval 7 day))) < storeRegdate ,"NEW", "OLD") AS isnewstore'))
        ->get();


      13. 최진욱

        $this->connection->raw 를

        DB::raw로 변경해도 동일하신가요?


        DB::raw가 자동 치환된다는 말씀이셨던건가요?

      14. akaHawk

        DB::raw는 중복선언된다고 에러가 떨어지는데, 


        뭔지 모르겠지만, 해결은 된 거 같습니다. 


        SELECT('store_name', 'store_state', $this->connection->raw('if((Date(subdate(now(), interval 7 day))) < storeRegdate ,"NEW", "OLD") AS isnewstore'))


        가독성은 떨어지지만 다음과 같이해서 다같이 데이터가 출력되네요.


        계속 같이 고민해주셔서 감사합니다!!

      15. 최진욱

        아니면 

        addSelect(\DB::raw('if((Date(subdate(now(), interval 7 day))) < storeRegdate ,"NEW", "OLD") AS isnewstore'));


      CommentAdd your comment...