제목 | 쿼리를 반복해서 날리고 싶은데 그 방법을 도저히 모르겠습니다. | ||
---|---|---|---|
카테고리 | CI 2, 3 | ||
글쓴이 | 불꽃노 | 작성시각 | 2019/04/25 20:21:58 |
|
|||
안녕하세요. CI로 개발을 진행한지 4개월이 되어가는 초보개발자입니다. 현재 CI 3.0과 Mysql을 사용해서 개발 중입니다. 개발에 개자도 잘 모르다보니, 최대한 커뮤니티나 구글을 통해서 궁금증을 해결하곤 했습니다. 하지만 이 부분에 대해서는 도저히 방법이 감조차 오지 않아서 몇가지 질문을 여쭙고자 합니다.
현재 View에서 체크박스를 선택한 값을 AJAX를 통해 배열에 담아 Controller로 보냅니다. 컨트롤러에서 받은 배열을 foreach문을 돌면서 쿼리를 입력하고 있는데요. $selChkList라는 배열에 하나의 값만 들어갔을 땐 정상적으로 쿼리가 날아가서 $value라는 문자열이 포함되어 있는 값을 반환하는데, 배열에 2개 이상의 value가 있으면 마지막 value의 쿼리만 날아갑니다.
Model/Common_m.php class Common_m extends CI_Model { function select($table, $query = array(), $limit = null, $offset = null) { foreach ($query as $key => $value) { if ($key == 'like') { foreach ($value as $a => $b) { $this->db->like(array($a => $b)); } } else if ($key == 'or_like') { $this->db->group_start(); foreach ($value as $a => $b) { $this->db->or_like(array($a => $b)); } $this->db->group_end(); } else if ($key == 'not') { foreach ($value as $a => $b) { $this->db->where_not_in($a, $b); } } else if ($key == 'in') { foreach ($value as $a => $b) { $this->db->where_in($a, $b); } } else if ($key == 'join') { foreach ($value as $a => $b) { $this->db->join($a, $b); } } else if ($key == 'join_left') { foreach ($value as $a => $b) { $this->db->join($a, $b, 'left'); } } else if ($key == 'group_by') { foreach ($value as $a => $b) { $this->db->group_by($b); } } else if ($key == 'or') { $this->db->or_group_start(); foreach ($value as $a => $b) { $this->db->or_where($a, $b); } $this->db->group_end(); } else if ($key == 'sort') { foreach ($value as $a => $b) { $this->db->order_by($a, $b, false); } } else if ($key == 'select') { foreach ($value as $a => $b) { $this->db->select($b); } } else { if(isset($key) && isset($value)) { $this->db->where(array($key => $value)); } } } $result = $this->db->get($table, $limit, $offset); return $result->result(); }
Controller/Search.php if (isset($selChkList) == true) { foreach ($selChkList as $key => $value) { $query['or_like']['use_type'] = $value; } }
결과적으로 mysql에서 날리는 이 쿼리를 CI로 옮겨오고 싶습니다. SELECT mul_basic.mul_use_type, mul_basic.case_num FROM aboutb_30_test1.mul_basic WHERE (mul_basic.mul_use_type LIKE "%value[0]%" OR mul_basic.mul_use_type LIKE "%value[1]%" . . . .) AND mul_basic.case_num != 'NULL';
선배님들의 조언과 피드백을 얻고 싶습니다. |
|||
다음글 | Update에 대한 $this->db->af... (2) | ||
이전글 | 코드이그나이터 초보입니다. 데이터베이스 관련 설정에서 ... (3) | ||
가리비
/
2019/04/25 22:42:23 /
추천
0
|
불꽃노
/
2019/04/30 23:05:08 /
추천
0
@가리비 감사합니다 가리비님! 도움 주신 내용 반영해서 문제 해결해보도록 하겠습니다!^^ |
일단 Controller/Search.php 부분은
이런식으로 $query['or_like']['use_type'] 에 여러개의 값이 들어갈 수 있게 처리를 해야될것 같고요
Common_m.php 부분에서도 or_like 부분이 수정되어야할 것 같습니다..
... 근데 구조는 조금 고민을 더 해보셔야하지 않나 싶습니다. 직관적이지 않은것 같아서요