| 제목 | 쿼리를 반복해서 날리고 싶은데 그 방법을 도저히 모르겠습니다. | ||
|---|---|---|---|
| 카테고리 | 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 부분은
if (isset($selChkList) == true) { foreach ($selChkList as $key => $value) { $query['or_like']['use_type'][] = $value; } }이런식으로 $query['or_like']['use_type'] 에 여러개의 값이 들어갈 수 있게 처리를 해야될것 같고요
Common_m.php 부분에서도 or_like 부분이 수정되어야할 것 같습니다..
foreach ($value as $a => $b) { foreach($b as $c) { $this->db->or_like(array($a => $c)); } }... 근데 구조는 조금 고민을 더 해보셔야하지 않나 싶습니다. 직관적이지 않은것 같아서요