조회 108
익명
2022년 12월 29일
안녕하세요 :) 현재 라라벨로 프로젝트를 하고있습니다. havingRaw을 사용하는데 다른 타입들의 데이터들은 다 잘 작동하는데 데이터타입이 enum인 것만 작동을 안합니다. 그러나 아래의 sql문은 하이디sql 에서 실행이 잘 됩니다. SELECT order_id AS cnt FROM test_table WHERE mall_id = 'test_mall' AND user_id = 'test_user' GROUP BY order_id HAVING MIN(type) = 'p' 데이터 타입은 아래와 같습니다. order_id = varchar mall_id = varchar user_id = varchar type = enum $row= DB::table("test_table") ->select(DB::raw('order_id as cnt')) ->where("mall_id", $test_mall) ->where("user_id", $test_user) ->groupBy('order_id') ->havingRaw('MIN(type) = p') ->get(); 해당 쿼리빌더에 잘못된 점이 있을까요??
구체적이고 정성스러운 질문에 ↑Up 투표를 눌러주세요.
설명이 부족한 질문에 ↓Down 투표를 눌러주세요. 커리어리가 질문자에게 수정을 요청할게요.
답변 1
해당 sql에 대한 리턴값이 로그에 출력되었을텐데 해당 내용은 없나요? 라라벨을 잘몰라서 답변달기에 조심스럽지만 sql 자체가 문제가 없지만 프레임워크에서 돌때 에러가 났다면 프레임워크에서 빌드한 쿼리가 위의 SQL과 다를 것이라 예상이 됩니다. havingRaw('MIN(type) = p') <- 위 쿼리에서는 MIN(type) = 'p' 의 형태인데 혹시 'MIN(type) = p' <- 이부분이 MIN(type) = p 이렇게 빌드된게 아닐까요?
쭈니
지란지교소프트 • 2022년 12월 30일
최선의 선택은 아닐 수 있겠지만 쿼리문이 아닌 collection 함수를 사용하는 것도 방법일 것 같네요. $row= DB::table("test_table") ->select(DB::raw('order_id as cnt')) ->where("mall_id", $test_mall) ->where("user_id", $test_user) ->groupBy('order_id') ->get(); $filtered = $row->map(function ($data) { return $data->filter(function ($row) { return $row['type'] === 'p'; }); });
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직 개발자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직 개발자들의 명쾌한 답변을 얻을 수 있어요.