라라벨 enum 타입 havingRaw절 사용방법 도와주세요ㅠㅠ

조회 108

profile picture

익명

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'; }); });

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.